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