如何在IE8中为双字母域设置cookie?

时间:2013-11-19 14:44:28

标签: javascript internet-explorer cookies internet-explorer-8

因为除了TLD之外,告诉短域名并非易事,{IE}的特殊情况Microsoft maintains a list。该列表可在res://urlmon.dll/ietldlist.xml

中找到

但是,我不明白如何实际使用该列表。即使 列出的特权双字母域似乎行为不端。

例如,可以在列表中找到域cn.ca。但这是我在IE8的javascript控制台中得到的:

Cookie setting fails on ca.cn with IE8

同样的方法适用于较长的域,例如stackoverflow.com(我在此示例之前清除了我的cookie以避免不相关的噪音):

Cookie setting works on stackoverflow.com with IE8

特殊情况清单是否真的被破坏了,还是我只是误解了它的目的?在IE8中是否有任何方式为短域设置cookie(不限于子域)?

1 个答案:

答案 0 :(得分:5)

documentation中没有好消息。但是,我在MSDN blog post中找到了很好的解释。

与您的问题最相关的是问题6:

  

IE不会为某些域设置Cookie,例如格式为http://xx.yy的域名?

     

正确。这个想法是你可能不会在“顶层”设置cookie   域名由不相关的组织共享。从历史上看,ccTLD的   格式xx.yy是有效的TLD,因此可能无法设置cookie。   虽然这种启发式方法从来都不是完美的,但它一直没有改变   15年,因此不太可能很快改变。该   这个问题的复杂性值得一篇很长的博客文章 - see this post

其他有趣的花絮:

  

IE的cookie代码似乎不支持定义   RFC2109或RFC2965。

     

Internet Explorer(包括IE8)不会尝试支持任何RFC   饼干。 WinINET(IE下面的网络堆栈)具有基于RFC之前的Netscape草案规范的cookie实现。

     

如果在设置DOMAIN属性时没有指定前导点,则IE   不关心?

     

正确。所有当前版本的浏览器(Chrome,FF,Opera等)似乎都将前导点视为隐式

来自Microsoft Support(影响IE 6.0,7.0和8.0):

  

症状:用户从http://servername.xxx.yy打开网页。该地址的网站设置一个cookie并指定“xxx.yy”作为该cookie的域。但是,Internet Explorer不会保存cookie信息。

     

原因:出于安全原因,Internet Explorer不会为xxx.yy这样的域保存cookie数据,其中.yy是双字母国家/地区代码域,而三个字母xxx是其中之一通用顶级域名:com,edu,gov,int,mil,net或org。此表单的域被视为顶级域,实际上是通用顶级域的特定于国家/地区的版本。出于安全原因,wininet会阻止为此类域设置Cookie。在这种情况下,xxx.yy实际上是顶级域名,并且以与“.com”相同的方式受到保护。

     

解决方案:此行为是设计使然。