最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【全部解决】Cookie的Domain值的起始是否包含点的问题 + cookie的Domain和Host的关系 + Cookie的Domain的作用域/有效范围

Web crifan 8667浏览 0评论

【问题】

在vs2010中调试C#的代码,以及用IE9中的F12抓取分析网页过程中。

有关于cookie的domain值,看到有些是“.live.com”,有些是“login.live.com”的,即有些domain值,起始是以点开始的,有些却不是:

所以此处想要搞清楚,对于cookie的domain值,起始是否包含点,还是不论包含和不包含,意义都是一样的?

 

【解决过程】

1.通过IE9的F12中的缓存->查看cookie信息,可以查看当前所有的cookie的信息。

看到其中,很多cookie的值,都是显示为“live.com”,而又去抓取到的网络信息中,看到对应返回的cookie的值中的domain的值,其实是”.live.com”,所以此处可以看出来,至少IE9中,会将对应的“.live.com”显示为“live.com”的。

2.而对于domain的值,是否必须以点开头,还是都允许,开头有没有点都一样?

对此,其找了下相关资料,找到这里:

RFC2109:HTTP State Management Mechanism

看到具体的解释为“The value for the Domain attribute contains no embedded dots or does not start with a dot. ”,即cookie的domain的值,必须是以点开始的,不以点开始的cookie,应该拒绝丢弃。

3. 看到这里,以为就找到了最权威的解释了。但是一想又不对,因为前面见到很多cookie的domain值,是“login.live.com”,即没有以点开始,但是好像也是有效和可用的。所以,好像是IE9或者是实际的实现中,又没有遵循上面的RFC2109规范?

【总结】

暂时看起来,对于需要自己赋值domain域的cookie,那么最好赋值以点开头的域,比如”.live.com”。至少这样符合规范。

另外,在IE9中的F12中所查看到的cookie的domain域,将“.live.com”显示为“live.com”,则暂时可以理解为,只是这么显示而已,省却了开头的那个点而已。

 

【后记 2012-02-19】

后来经过一些教训而学到了更多关于domain方面的知识:

1.首先,最容易知道和理解的是,如果domain和所要提交的http的host不同,那么对应的cookie则是无效的,即不起作用的。

而其中的host,举例来说,对于这样的网址:

https://cid-9a8b8bf501a38a36.users.storage.live.com/items/9A8B8BF501A38A36!660/InsertSkydriveFile_v2.0_2012-02-06-home.7z

其Host是对应的cid-9a8b8bf501a38a36.users.storage.live.com,而一个cookie,如果其domain是cid-9a8b8bf501a38a36.users.storage.live.com或.users.storage.live.com,则是匹配的,即发送对应的http的请求的时候,对应的cookie是有效的,而如果该cookie的domain是.storage.live.com或storage.live.com或.live.com等等,那么都是不匹配的,发送对应的http的请求的时候,即使调用了HttpWebRequest的CookieContainer.Add添加了对应的cookie,也是不起作用的。

【Cookie的Host和Domain的关系】

先说Host,一个http的请求中的host,在C#代码中添加对应的header的时候,是不需要添加Host的,该值是http请求或网页自动计算的,不需要也不能设置此Host值。

而Cookie中的Domain,比如domain是.live.com,要和对应的访问的网页地址中的Host相匹配,否则,对该http请求,cookie是无效的,就不起作用了。访问该网页之前,即使添加此cookie到CookieContainer,也是做无用功。

举例例子,参数上面的解释。

所以,host和domain的话,实际上,正常情况下,是应该相匹配的。

 

【Cookie的domain的值所表示的的作用域】

cookie的domain,代表了其作用域,即有效范围。

一般是对应的http地址的最开始那部分的值。

比如对于访问http://login.live.com//xxxx来说,cookie的domain是.live.com的话,那么就是和此网页相匹配,和此网页的Host=login.live.com相匹配,是有效的。

尤其需要注意的是,cookie的domain所代表的含义。

举例来说,如果一个cookie的domain是.live.com的话,那么对于去访问.users.storage.live.com

或.storage.live.com类型的地址的话,是无效的,因为.live.com,其作用域,只是xxx.live.com,而并不包括xxx.users.storage.live.com或xxx.storage.live.com类型的地址。

这点需要特别注意,否则就会像我一样,搞错了cookie的domain的作用域,使得访问不同地址,cookie变的无效而使得程序调试始终无法得到预想的结果,折腾了太长的时间。

转载请注明:在路上 » 【全部解决】Cookie的Domain值的起始是否包含点的问题 + cookie的Domain和Host的关系 + Cookie的Domain的作用域/有效范围

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (1)

    84 queries in 0.178 seconds, using 22.09MB memory