2010-01-11 60 views
2

我需要删除以前为父域的子域浏览主机时为父域设置的cookie。无法从Django中的其他(父级)域获取Cookie

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

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

可以在Python或Javascript中执行这种删除吗?

回答

1

Cookie可能设置为'域'参数。将cookie设置为可以从Cookie的所有子域中访问。

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

+0

>将cookie设置为可以从Cookie设置的域的所有子域访问。 你究竟是什么意思?是的,Cookie被设置(如Firebug中所示),其中domain = example.com。问题是我几乎不可能影响cookie设置(代码是用PHP编写的,而不是Python,除非通过管理器层次结构等,否则我无法访问其存储库),所以我试图找到另一种解决方案。 – 2010-01-11 17:02:03

0

即使对于您无法阅读的cookie,也可以尝试拨打delete_cookie。 Django将输出相关的Set-Cookie标题以删除cookie。自然,您传递给delete_cookiedomainpath必须与您打算删除的cookie匹配。

但是,如果您无法读取cookie,则可能存在另一个问题,这可能会导致您无法删除它。您确定父域中的Cookie设置了domain=parentdomain.tld参数吗?如果不是,那么它将不会在子域中可见或可删除,除非在IE中由于该浏览器对没有域指定的cookie的错误处理。

+0

根据Firebug的说法,来自父域的cookie设置为domain =“。example.com”。我尝试的第一件事是使用response.delete_cookie('xyz',domain ='。example.com')去除cookie,但没有任何效果。 – 2010-01-11 17:36:29

+0

这应该肯定会对example.com的子域产生影响,只要cookie上没有设置“路径”,并且它不是仅限于https的cookie ......但如果是这样的话,您也可以在服务器端获取该cookie。在Preferences-> Privacy-> Show Cookies中检查它。 – bobince 2010-01-11 22:42:24