Cookie域优先?

时间:2009-12-22 14:02:45

标签: asp.net cookies

我有几个网站。每个站点都是本地化版本,提供特定于一组给定语言环境的内容。还有一个全球或“全球”网站。我把它们设置如下:

我正在尝试使用Cookie跟踪每个应用程序的活动。每个站点的cookie名称是相同的,并使用域的默认设置(即在.net中我没有指定httpCookie.Domain的值 - 我保留默认值。)

当我访问“特定于语言环境”的网站时,一切正常,但是一旦我访问“全球”网站,当我回去访问我的“特定于语言环境”的网站时,似乎使用了此网站的Cookie,而不是为“特定于语言环境”的网站发布的cookie。

有关如何让我的“全局”Cookie优先于“特定区域”网站上的“本地特定”Cookie的任何想法?

2 个答案:

答案 0 :(得分:8)

在大多数浏览器中,设置不带“域”的Cookie会使对当前主机名有效。这不能通过在“域”上设置任何值来实现;如果您想要这种行为,则必须省略'domain'参数。

然而,在IE中,您设置的没有“域名”的任何cookie都将获得当前主机名的隐含“域”。这意味着如果您在'example.com'上设置cookie,则无法阻止它被发送到'sub.example.com'。

因此,您不能拥有不共享父域安全上下文的子域。如果您希望将子域与其父域保持分开,则必须(如JustLoren建议的那样)创建主站点www.example.com,而不仅仅是example.com

当两个包含不同域名的Cookie有效时,浏览器通常会同时发送这两个Cookie,因此您可以期待document.cookie 'a=b; a=c'。如果您的cookie阅读层不期望多个具有相同名称的cookie,其中一个将消失(您无法控制哪个)。

另一种方法,如果你不关心在其他网站和主要网站之间设置边界,那就是在不同的子网站上使用不同的cookie名称。

答案 1 :(得分:0)

bobince对于Internet Explorer的异常行为是正确的。请注意,Edge的工作方式不同,更像FireFox(对于此方面)。

如果您没有设置任何Cookie属性,那么您可能会遇到路径问题。在您的情况下,属性path=/将是一个不错的选择。

请注意,浏览器处理Cookie的方式有很多差异。如果您有兴趣,可以阅读How Different Browsers Handle Cookies Differently