请教:两个不同子域名论坛的cookies session如何设置

ASP关于Cookie跨域操作,采用设定domain为根域名的方法_ASP技巧_动态网站制作指南
ASP关于Cookie跨域操作,采用设定domain为根域名的方法
来源:人气:9174
  Cookie跨域操作看来是个简单的问题,因为只要指定Domain属性为指定网站的根域名就能够了.但是笔者在实际使用过程中却碰到了一些问题,的确值得注意.
  环境介绍
  cookie在www主域名下创建,并写入Domain属性,如:(为方便调试以下代码皆为代码)
  Write.asp
&程序代码&%Response.Cookies(CookieName)("UserName") = "SunBird"Response.Cookies(CookieName)("Pass") = "xyz1234"Response.Cookies(CookieName).Domain = "xxxx.com"%&
  上面文档放在www主域名下,同时在同目录下放置一个读取cookie的Read.asp
  Read.asp
&程序代码&%Response.Write Request.Cookies(CookieName)("UserName")Response.Write Request.Cookies(CookieName)("Password")%&
  再放一个Read.asp文档到另外一个子域名站点里,代码同上。最后我们再做一个清除cookie的Clear.asp放在主域名下
  Clear.asp
&程序代码&%Response.Cookies(CookieName)("UserName") = ""Response.Cookies(CookieName)("Password") = ""Response.Cookies(CookieName).Domain = "xxxx.com"%&
  现在能够通过下面的执行顺序来测试,Write.asp--&主域名的Read.asp--&子域名的Read.asp 任何Read.asp页面都能够读取到Write.asp创建的cookie的值,然后再运行Clear.asp进行清除,一切都Ok, 看上去没有什么问题。
  但是把这种方法运用到实际的站点时却出现问题了。
  问题描述:
  第一次登录一切ok,任何子域名都能够访问到主域名存储的cookie,但是,一旦退出之后,子域名的cookie被清除了,但是主域名的cookie仍然保留着,强行清除主域名的cookie之后,无论怎样登录主域名下都无法保存cookie了,除非关掉浏览器重新打开。
  经过多次尝试之后,无意中发现问题所在,以下是测试经过。
  创建一个Write2.asp的页面放在主域名下
&程序代码&%Response.Cookies(CookieName)("TEST_COOKIE") = "TEST_COOKIE"%&
  第一步:关闭浏览器后,按以下顺序执行,Write.asp--&主域名的Read.asp--&子域名的Read.asp 到这里任何Read.asp读取正常。
  第二步:Clear.asp--&主域名的Read.asp--&子域名的Read.asp 到这里清除操作是成功的。
  第三步:Write.asp--& Write2.asp --& 主域名Read.asp --& 子域名Read.asp 到这里两个Read.asp都能够读取到cookie的值。
  第四步:重新执行第二步,发现主域名Read.asp仍然输出了值,而子域名下的Read.asp的值已被清空了。
  根据以上测试总结以下几点再跨域使用cookie时需要注意的地方
  1、当您有一个Cookie组(或叫Cookie字典)使用Domain属性指定域名之后,当您在对该组的成员进行修改或新增的时候,一定要在操作之后加上Resonse.Cookies(CookieName).Domain属性。
  2、假如没有必要,请不要修改已配置Domain的Cookie组,直接使用Response.Cookies("CookieText") = CookieValue 来创建一个新的Cookie。
优质网站模板在Cookie规范上说,一个cookie只能用于一个域名,不能够发给其它的域名。当你在浏览器中对一个域名设置了一个cookie,这个 cookie对于其它的域名将无效。如果你想让你的用户从两个不同域上登陆,那就有点麻烦了。我们看下跨二级域和主域是怎么实现登陆的。
跨二级域名
  我们知道cookie是可以跨二级域名来访问,例如你 www.test1.com 在的web应用程序创建了一个cookie,要想在bbs.test1.com这样的二级域名对应的应用程序中访问,就必须 在创建cookie的时候设置domain参数domain=test1.com,设置为相同的主域
HttpCookie lcookie = HttpContext.Current.Response.Cookies[FormsAuthentication.FormsCookieName];
lcookie.Domain = "test1.com";
跨顶级域名
比如,现在是两个不同的域名: 两个不同的域名,如果用单纯的用Jsonp 也可以实现,我测试在火狐和google 下,两个站点同时登录没有问题,但是IE 下没有记录Cookie,无法实现跨越登录,查阅了一些资料,终于找到解决方案:
需要在代码中添加如下代码,用两个域名分别访问就可以了。
HttpContext.Response.AddHeader("P3P", "CP=CAO PSA OUR");
这段代码是用来设置P3P响应头。是因为IE浏览器支持的P3P导致跨站点时cookie被阻止,无法创建cookie。
(FireFox目前还不支持P3P安全特性,FireFox自然也不存在此问题。不需要添加P3P响应头。)
原文链接:
浏览: 4552 次
来自: 青岛
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'09:47 提问
Java跨域共享cookie问题
比如像www.test1.com与www.test2两个完全不同的域 共享一个cookie 怎么实现啊
都看好多天了 都没有一个合适的方法,求来个大神解救啊 。。。。。小弟万分感谢啊!
按赞数排序
跨顶级域不行,浏览器不会发送一个域名的cookie到另外一个域的,只能跨n级子域名,将cookie domain设置为顶级域名
要想共享cookie,你只能登陆成功的时候用script或者img对象加载另外一个域名的api接口,将cookie信息发送到这个接口去设置这个域名的cookie才行,
浏览器找cookie的时候就是根据域名,你两个域名只会有一个被浏览器绑定到这个cookie。所以却没法共享。
将cookie的路径设置为cookie.setpath("/")试试!
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐配置nginx实现通过cookie-free域名发送静态资源 - 为程序员服务
配置nginx实现通过cookie-free域名发送静态资源
最近真是闲,天天写博客……自从去百度实习后,我对自己在专业知识上的要求提升到了一个前所未有的高度,以前觉得能用就行,现在但凡可能有效率问题就会觉得抓狂。说到网页的加载效率,这个是我一直关注的东西,昨晚突然想起 cookie-free 这回事,一拍脑袋决定给网站的所有静态资源都搞成 cookie-free 的。
使用 cookie-free 域名的好处
当浏览器加载 HTML 文件中引用的静态资源 —— 如图片、外部 CSS、外部 JS 等 —— 时,若该资源所属域与当前页面相同,则会在 HTTP 头请求中加载当前域的 cookie 信息。
下面需要举个例子:
好吧,不是这个意思,认真的举个栗子例子:
你的网站为 http://www.whatever.com,启用了 Google Analytics 或百度统计或任意第三方统计代码。用户访问你的网站首页,首页 html 代码引用了 10 个图片文件,图片地址是 http://www.whatever.com/images/[0-9].jpg (此处有正则)。
因为 Google Analytics 在 http://www.whatever.com 这个域下设置了 cookie,浏览器在加载这些图片时,会把 Google Analytics 设置的 cookie 放在头信息里发过去。
本来一个 cookie 也没多大,顶多 1KB,但是如果你要加载 50 个图片(或其它静态文件),这样发送的 cookie 总量就多达 50KB 了。对于静态资源来说,发送这些 cookie 完全没有意义,所以我们不想让浏览器请求这些静态资源时发送 cookie。
下图是苹果教程网未设置 cookie-free 域名前请求某静态资源时 HTTP 请求头中包含 cookie 内容的惨状:
配置nginx实现cookie-free域名
其实单独把 cookie-free 域名这个事儿单独拎出来说是一件很伤感的事情,因为有钱淫一般都会同时选择 VIP 套餐:CDN。使用 CDN,将静态资源分发在多台服务器上,用户在请求资源时智能判断哪个节点速度最快并返回,同时再启用一个 cookie-free 域名用来指向静态资源。
对于没有能力搞 CDN 的人,只能单独配置一下 cookie-free 域名了。没关系,等咱有了钱,服务器买 20 个,什么联通、电信、铁通、长宽、移动、电信通,通通给接上,带宽怎么着也得 20M,还得上下行速率对等。
好了不废话了,下面使用专业的语言描述一下要干的事:
前提条件:一台自己的服务器(VPS),安装了 nginx,已经有可用的 nginx 配置文件(假定 server_name 为 www.whatever.com),网站运转正常。
待办事项:修改 nginx 的配置文件,让 nginx 监听 cdn.whatever.com,并修改部分对静态文件的处理规则。
首先你要增加一个子域名(cdn.whatever.com)指向你的服务器,这个不用多说了吧……
然后需要编辑你的 nginx 配置文件,它原来大概可能长这样server {
server_name www.whatever.com whatever.
/root/to/your/
location / {
index.html index.
location ~* \.(gif|jpg|png)$ {
expires 30d;
/*此处略去若干*/
}你需要做的是首先修改 server_name 字段,让 nginx 同时监听 cdn.whatever.com。server_name www.whatever.com whatever.com cdn.whatever.然后新增一个 location 块,写如下内容,并确保这个 location 块处于所有已存在的 location 块之前,即 nginx 需要优先处理这个 location 中的内容。location ~* \.(?:js|css|png|jpg|jpeg|gif|ico)$ {
add_header P
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}搞定后保存 nginx 配置文件,然后重启 nginx。
最后一步,将网页中引用的所有 www.whatver.com 域下的静态文件通通改为 cdn.whatever.com。以上文所说的那个首页为例,新的图片地址为 http://cdn.whatver.com/images/[0-9].jpg。
下图为苹果教程网启用了 cookie-free 域名来发送静态资源后的 HTTP 头请求截图,是否清爽了很多。最重要的是,因为没有 cookie 的发送,用户的流量节省了很多,且网页的加载速度也节省了很多,我开心的笑了。(画外音:别傻了,能省几 KB 啊)
其实要实现 cookie-free,只需要换一个域名并保证当前页面没有给根域名设置 cookie 即可。比如我们虽然启用了 cdn.whatever.com,但是由于 Google Analytics(以下简称 GA) 设置 cookie 的域为 .whatever.com 而不是 .www.ppios.com,会导致请求 cdn.whatever.com 中的内容时依然会发送 cookie。具体 cookie 的设置情况请自行打开开发者工具查看。
这里再提一下关于限制 GA 设置 cookie 的内容,原则上 GA 应该是默认只设置当前域名的,比如你的页面 URL 是 http://www.whatever.com,则 GA 设置 cookie 的域就是 www.whatever.com;同理如果你的 URL 是 http://whatever.com,则 GA 会把 cookie 设置为 .whatever.com,这样你所有的子域名都会被这个 cookie 影响了。
解决方法就是修改 GA 统计代码,在_gaq.push(['_setAccount', 'UA-']);
_gaq.push(['_trackPageview']);这两行之前新增一行_gaq.push(['_setDomainName', 'www.whatever.com']);这样就是告诉 GA 只准在 www.whatever.com 域下设置 cookie,关于这个设置顺序折腾了小半个晚上,大家一定要注意啊。
参考引用及相关阅读
上文所述 nginx 配置参考自
nginx 官网
关于 GA 配置的解惑
Github 此前一篇关于 cookie 溢出攻击的好文
我抬头看了一眼书架上的「HTTP 权威指南」,露出了不易察觉的微笑。
everything starts & ends.
原文地址:, 感谢原作者分享。
您可能感兴趣的代码}

我要回帖

更多关于 bens cookies 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信