手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆

“同名Cookie”的分析

首页 > PHP >

原文基于.net,不过,我想PHP也差不多。而且这种问题很常见。。。

原文地址:http://www.cnblogs.com/flashlm/archive/2009/05/17/theSameNameCookie.html
内容:
了解Cookie的同学应该知道,浏览器客户端是以domain,path,name作为Cookie的唯一标识的,只要Name、Domain、Path中的任何一项不同,Cookie就是不能同的。由此便产生了同名Cookie。

例如有四个cookie如下:
d=1; expires=Sat, 23 May 2009 03:48:22 GMT; path=/; domain=.dny.com
d=2; expires=Sat, 23 May 2009 03:48:46 GMT; path=/; domain=.test.dny.com
d=3; expires=Sat, 23 May 2009 03:48:46 GMT; path=/test/; domain=.dny.com
d=4; expires=Sat, 23 May 2009 03:48:46 GMT; path=/test/; domain=.test.dny.com
他们是可以共存的。

了解Cookie的同学也应该知道,cookie的domain、path在服务器端都是只写的,也就是说在服务器端不能读取到任何一个Cookie的domain或者path值,只能读取到name和value。那么问题便产生了,假设上面的四个Cookie同时存在,那么服务器端读取到的name为“d”的cookie到底会是哪个值呢?

经过我的测试,结果是这样的,如果客户端浏览器发送了多个同名的 cookie,那么 Request.Cookie 将返回其中最符合(符合条件且范围最小)当前domain、path的一个

例如,还是上面四个cookie,我通过下面这些地址去获取Request.Cookie["d“],值是不同的:
http://test.dny.com/test/cookies.aspx    4
http://dny.com/test/cookies.aspx        3
http://test.dny.com/cookies.aspx        2
http://dny.com/cookies.aspx        1

而实际上,服务器上用Request.Cookies.Count可以知道,得到的确实是有4个Cookie。

以上内容欢迎更加深入讨论。

--EOF--


我在想,由于客户端保存cookie是有长度限制的,象上面这四个COOKIE,如果在客户端保存的话,也应该是存为两个文件,一个是test.dny.com,一个是dny.com,那么path,又是怎么处理 的呢?偷懒,没做试验。。。。。。

 




本站采用创作共享版权协议, 要求署名、非商业和保持一致. 本站欢迎任何非商业应用的转载, 但须注明出自"膘叔", 保留原始链接, 此外还必须标注原文标题和链接.

Tags: cookie

« 上一篇 | 下一篇 »

只显示10条记录相关文章

[转]PHP删除cookie的一个小秘密 (浏览: 23668, 评论: 1)
IE中iframe跨域丢失Session问题(续 p3p) (浏览: 23245, 评论: 0)
子域和根域同名cookie的处理 (浏览: 22696, 评论: 0)
Cookie常识 (浏览: 22155, 评论: 1)
浅谈TP的COOKIE类 (浏览: 21826, 评论: 0)
关于cookie (浏览: 14964, 评论: 0)
cookie,又见cookie (浏览: 13812, 评论: 0)
彻底杜绝PHP的session cookie错误 (浏览: 13160, 评论: 0)

发表评论

评论内容 (必填):