【问题标题】:Could not get cookie from another (parent) domain in Django无法从 Django 中的另一个(父)域获取 cookie
【发布时间】:2010-01-11 16:26:34
【问题描述】:

在父域的子域浏览主机时,我需要删除之前为父域设置的 cookie。

即,为 example.com 设置了一个 cookie“xyz”,我正在尝试使用 Django 后端在 subdomain.example.com 上删除它。

给视图的 request.COOKIES 不包含任何 cookie,除了来自 subdomain.example.com 的那些,所以我不能只写 response.delete_cookie(...) 来删除它。

是否可以在 Python 或 Javascript 中执行此类删除?

【问题讨论】:

    标签: javascript python django cookies


    【解决方案1】:

    cookie 可能是使用“域”参数设置的。将 cookie 设置为可从设置 cookie 的域的所有子域访问。

    我不是 python 人,但我对 http 协议的了解表明这可能是问题所在。

    【讨论】:

    • > 将 cookie 设置为可从设置 cookie 的域的所有子域访问。您到底是什么意思?是的,cookie 是使用 domain=example.com 设置的(如 Firebug 中所示)。问题是我几乎不可能影响 cookie 设置(代码是用 PHP 而不是 Python 编写的,除非通过管理器层次结构等,否则我无法访问它的存储库),所以我正在尝试寻找另一个解决方案。
    【解决方案2】:

    您可以尝试调用delete_cookie,即使是您无法读取的cookie。 Django 将输出相关的 Set-Cookie 标头以删除 cookie 无论如何。当然,您传递给delete_cookiedomainpath 必须与您要删除的cookie 匹配。

    但是,如果您无法读取 cookie,则可能存在另一个问题,这可能会阻止您将其删除。您确定来自父域的 cookie 是使用 domain=parentdomain.tld 参数设置的吗?如果不是,则它不会在子域中可见或无法删除,除非在 IE 中,因为该浏览器对无域指定 cookie 的处理不当。

    【讨论】:

    • 根据 Firebug 的说法,来自父域的 cookie 设置为 domain=".example.com"。我尝试的第一件事是使用 response.delete_cookie('xyz', domain='.example.com') 删除 cookie,但没有任何效果。
    • 这当然应该对 example.com 的子域产生影响,只要在 cookie 上也没有设置 path 并且它不是仅 https 的 cookie...但是如果是的,您还将在服务器端获取该 cookie。在 Preferences->Privacy->Show Cookies 中检查它。
    猜你喜欢
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    • 1970-01-01
    • 2014-05-09
    • 2021-03-16
    • 1970-01-01
    • 2022-01-07
    相关资源
    最近更新 更多