我有一个网站,例如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?
其中一个子域是否使用下划线?IE在接受不遵循URI RFC的子域中接受cookie时遇到问题.
根据RFC1035(域名 - 实现和规范):
[域名]必须以字母开头,以字母或数字结尾,并且内部字符仅包含字母,数字和连字符.
原来在他们的一些领域的有一个下划线("_"): some_domain.example.com
.虽然这违反了RFC,但所有其他浏览器都能正常工作.
MSIE 7,在带有下划线的域上,默默地丢弃该主机的所有cookie,并拒绝接受新的cookie.
唯一的解决方案是使用符合RFC的域(我用" - "替换了所有"_"并设置了RewriteRule,以便将流量重定向到兼容域).
该问题不仅适用于域名中的下划线,也适用于以数字开头的域名.所以1aaaaaaa.tld
实际上是一个非标准的域名,这将导致IE拒绝cookie.
我通过仅使用www2.1aaaaaaa.tld
,然后为主机1aaaaaaa.tld
和www.1aaaaaaa.tld
主机添加重写规则来解决它.htaccess
.不知道这是否真的符合标准兼容的解决方案....但无论如何,它似乎已经解决了cookie问题.
希望有人帮助!