Internet Explorer忽略某些域上的Cookie(无法读取或设置Cookie)
我有一个网站,例如example.com
,用户可以在其中设置自己的子域(一个用户 – 一个子域)并上传他们自己的脚本,例如http://somedomain.example.com/xyzzy.php
将映射到/www/somedomain/xyzzy.php
现在,在某些域上,Internet Explorer 7将不会/不能接受Cookie。 使用Fiddler进行检查:服务器正确地发送Set-Cookie响应,但是Cookie从不出现在IE中 – 对于JS或开发人员工具。 根据请求,IE7也不会发送Cookie头。
Cookie设置为用户的域(如somedomain.example.com
),path是/
,尝试不同的到期选项(过去,未来,当前,“0”),不是HttpOnly,不安全。
FF,Opera,Safari和Chrome都可以正常工作。
为什么IE忽略cookies?
其中一个子域名是否使用下划线? IE浏览器在接受不遵循URI RFC的子域中的Cookie时遇到问题。
根据RFC1035 (域名 – 实施和规范):
[域名]必须以字母开头,以字母或数字结尾,并且只有字母,数字和连字符作为内部字符。
结果有些域名中有一个下划线(“_”): some_domain.example.com
。 虽然这是对RFC的违反,但所有其他浏览器正常工作。
在具有下划线的域上,MSIE 7默默地丢弃该主机的所有cookie并拒绝接受新的cookie 。
唯一的解决scheme是使用RFC兼容的域(我用“ – ”replace了所有的“_”,并设置了一个RewriteRule,以便将stream量redirect到兼容的域)。
这个问题不仅适用于域名中的下划线,也适用于以数字开头的域名。 所以1aaaaaaa.tld
实际上是一个非标准的域名,这将导致IE拒绝cookie。
我只使用www2.1aaaaaaa.tld
解决了这个问题,然后在.htaccess
为1aaaaaaa.tld
和www.1aaaaaaa.tld
主机添加了重写规则。 不知道这是否符合标准兼容解决scheme……不过无论如何,它似乎已经解决了cookie问题。
希望帮助别人!