昨天贾宁旨光临寒舍,吃过晚饭回来后就跟他聊天,后来又玩了一会儿《Black Hawk Down》对战,到了大概晚上11点多,开始继续尝试用 Response.Cookies.Domain 来解决子域共享 Cookie 的问题。
根据网上的资料,包括 MSDN 的文章都说设置 Response.Cookies("domain").Domain = "Microsoft.com" 这样的形式以后,可以实现该Cookie对整个“Microsoft.com”域下的所有服务器都可以共享。我在本机测试的时候,也的确实现了“xxx.com”和“www.xxx.com”的Cookie共享,但是把测试文件传到wukangrui.net以后,www.oophome.net 却无论如何读取不到 oophome.net 写入的Cookie。我的测试程序如下:
test.asp
- <%
- Const CookieName="daodaoeric"
- Response.Cookies(CookieName).Domain = "oophome.net"
- Response.Cookies(CookieName)("Name") = "haha"
- Response.Cookies(CookieName)("HashKey") = "test"
- %>
test2.asp
- <%
- Const CookieName="daodaoeric"
- Response.Write Request.Cookies(CookieName)("Name")
- Response.Write Request.Cookies(CookieName)("HashKey")
- %>
上传到空间里以后,test2.asp就无法读取Cookies,什么都不显示。后来我想,会不会是需要给test2.asp也设置Cookie作用域呢?但是又不可能写 Request.Cookies(CookieName).Domain = "oophome.net"
到睡觉的时候,这个问题还是没解决。
夜里做梦,梦见我把test.asp和test2.asp都同时加了写入和读取Cookie的操作,咦?那么test2.asp不是也可以指定Cookie作用域了吗?
醒来之后梦里的代码还历历在目,于是赶紧测试。两个文件修改如下:
test.asp
- <%
- Const CookieName="daodaoeric"
- Response.Cookies(CookieName).Domain = "oophome.net"
- Response.Cookies(CookieName)("Name") = "haha"
- Response.Cookies(CookieName)("HashKey") = "test"
- Response.Write Request.Cookies(CookieName)("eric")
- Response.Write Request.Cookies(CookieName)("daodao")
- %>
test2.asp
- <%
- Const CookieName="daodaoeric"
- Response.Cookies(CookieName).Domain = "oophome.net"
- Response.Cookies(CookieName)("eric") = "daodao"
- Response.Cookies(CookieName)("daodao") = "Eric"
- Response.Write Request.Cookies(CookieName)("Name")
- Response.Write Request.Cookies(CookieName)("HashKey")
- %>
果然,这下在test.asp里读取到了test2.asp写入的Cookie,在test2.asp读取到了test.asp写入的Cookie,在浏览器里分别用www.oophome.net 和 ctc.oophome.net 来访问这两个页面,也都正确显示了读取到的Cookie。
随后我把我的blog的用户Cookies处理部分根据这个测试做了修改,给写入和读取Cookie的代码前面加上了Response.Cookies(CookieName).Domian = "oophome.net",然后再测试,一切正如所期望的那样,在oophome.net的任何一个子域名下,都能正确读取到Cookie信息,判断登陆状态了。
总结:
只要在读取和写入Cookie之前都先用Response.Cookies.Domain = "域名根",就能实现该域名根下的所有子域名共享Cookie,而如果只是在写入Cookie的时候设置作用域而在读取的时候不设置,则不能共享。
作者:小李刀刀
原文链接:再战子域共享Cookie问题
裁纸刀下版权所有,允许非商业用途转载,转载时请原样转载并标明来源、作者,保留原文链接。
[quote=catilearn]我是新云和动网整合,发生的错误和 leiweibin 描述的一模一样,可是我没有启用子域名啊.[/quote]
你的问题检查一下防火墙的设置,我有专门两篇文章是讲你们这个错误的。
我是新云和动网整合,发生的错误和 leiweibin 描述的一模一样,可是我没有启用子域名啊.
[quote=leiweibin]可是使用了“子域名共享Cookies文件”后出现问题如下:
在动易登陆后在论坛也同时登陆成功,在论坛进行注销操作后动易这边无法退出,要在动易注销可以同时把论坛注销掉,在论坛登陆的时候出现msxml3.dll 错误 '80004005'
未指定的错误
/dv_dpo/cls_dvapi.asp,行 109
,死活登不上去,也不能注册!
我的动易2006SP4+DVBBS7.1SP1最新版,测试报告结束!期待回音。辛苦拉![/quote]
这个未指定的错误是MSXML组件报错,我们没有测试过子域名共享补丁+整合同时使用的情况。如果不使用子域名功能整合正常的话,还是建议你不要启用子域名。在没有使用服务器集群的时候,用频道变子站功能除了多加一个虚拟主机以外并没有什么好处。
可是使用了“子域名共享Cookies文件”后出现问题如下:
在动易登陆后在论坛也同时登陆成功,在论坛进行注销操作后动易这边无法退出,要在动易注销可以同时把论坛注销掉,在论坛登陆的时候出现msxml3.dll 错误 '80004005'
未指定的错误
/dv_dpo/cls_dvapi.asp,行 109
,死活登不上去,也不能注册!
我的动易2006SP4+DVBBS7.1SP1最新版,测试报告结束!期待回音。辛苦拉!
[quote=緋呂]睡觉也在开发。。。。强。。。。。。[/quote]
不是睡觉的时候也在开发,只是日有所思夜有所梦……
[quote=乖宝宝]怎么你睡觉的时候比白天能干![/quote]
这是撞上的,白天的时候自己昏头了,所以脑子有点“一根筋”了……
睡觉也在开发。。。。强。。。。。。
怎么你睡觉的时候比白天能干!