默认情况下,IE10跨子域共享cookie

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (9)

IE 10似乎与其他主要浏览器(IE8、IE9、Firefox、Chrome、Safari)处理cookie和子域的方式不同。

在测试环境中广泛使用子域,例如:

  • user1.devel.example.com
  • user2.devel.example.com
  • qa.example.com

而且我们的生产环境也在顶端,例如example.com(技术上也是www.example.com)。

我们使用phpsetcookie($name, $value, $expires)函数天真地(未指定显式路径或域)来设置cookie,然后通过向值分配空字符串清除cookie(当用户注销时)。这一直都很好,每个唯一的子域都使用了自己的cookie。

IE10现在与所有子域“共享”TLD中设置的cookie。我们观察到的最初症状是,没有人可以从子域登录。我们观察到了一些事情:

  • 即使它共享该值,也没有子域能够清除cookie。
  • 当TLD清除cookie时,它也会立即从所有子域中删除。
提问于
用户回答回答于

在IE中,这被视为所有子域的通配符cookie。Chrome和Firefox没有显示这种行为--它们将来自非www根域的cookie集关联为只与根关联。

我使用.NET WebForms、IIS和我的主机文件对示例站点进行了编码。我有三个网站:.site.com、b.site.com和site.com。他们都用完全相同的名字供应饼干。我们管它叫“ShoppingCart”吧。

可以在cookie上设置多个属性,包括与cookie关联的域。我将此属性留给.NET定义/未定义。当Chrome从每个站点收到Cookie时,它会将cookie的域显式显示在浏览器地址栏中列出的域上。

同样在IE中,如果设置多个cookie的名称相同,IE将按照设置的顺序将它们返回给服务器。

在.NET中,据我所见,Cookie通常是通过键名而不是索引来访问的。

总之,当您的子域都共享相同的cookie键名时,不要使用非www域,因为当Chrome/Firefox处理域关联时,IE会导致错误行为。

用户回答回答于

如果在一个域上有多个PHP站点。例如,如果根上有Wordpress(example.com),并且在子域(a.example.com)上有一个自定义PHP应用程序,那么无论是在应用程序还是Wordpress中,都需要设置不同的SessionName。

添加会话_会话前的名称()_start()应该为会话指定两个单独的名称,因此不会发生冲突。

session_name('AppSession');
session_start();

扫码关注云+社区