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解决了这个问题,然后在.htaccess1aaaaaaa.tldwww.1aaaaaaa.tld主机添加了重写规则。 不知道这是否符合标准兼容解决scheme……不过无论如何,它似乎已经解决了cookie问题。

希望帮助别人!