【问题标题】:Cookie Domain Precedence?Cookie 域优先级?
【发布时间】:2018-02-18 01:25:06
【问题描述】:

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

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

当我访问我的“特定地区”网站时一切正常,但是一旦我访问“全球”网站,当我返回访问我的“地区特定”网站时,似乎使用了该网站的 cookie,而不是为“区域特定”网站发布的 cookie。

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

【问题讨论】:

  • 超越将您的全球网站变成“www.mydomain.com”这一显而易见的想法?

标签: asp.net cookies


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 这就是我没有回答的原因。你的信息量要大得多:)
  • 发布后,我做了一些阅读,发现了类似的问题描述和解决方案。对我有用的是后一种方法:“另一种方法,如果您不关心在其他站点和主要站点之间设置边界,则只是在不同的子站点上使用不同的 cookie 名称。”。我将为每个站点创建一个稍微不同的 cookie 名称,并且了解如何读取它们的层将能够区分不同的名称。
【解决方案2】:

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

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

请注意,浏览器在处理 cookie 的方式上存在许多差异。有兴趣的可以阅读How Different Browsers Handle Cookies Differently

【讨论】:

    猜你喜欢
    • 2011-08-17
    • 2013-01-17
    • 1970-01-01
    • 2015-12-19
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    相关资源
    最近更新 更多