真的很奇怪的 Cookie 头行为?- Cookies

4

我在这些测试中使用的是Firefox 3.6.8。

我正在使用以下代码在我的Web应用程序响应头中设置cookie:

Set-Cookie: session=7878dfdsfjsdf89sd89f8df9

这似乎不能覆盖会话Cookie。


当进行请求时,Firefox会发送重复的Cookie

Cookie: session=7d75cd8f55895cbccb0d31ee07c7afc0; 
        session=671e8448a5cebda0442005a186cf69a3; 
        4cb6f2d75c9ffc8916cb55bcbaafecd8

发生了什么?? 有什么想法吗?=)


在我的情况下,这相当灾难性...如果有人能解释一下正在发生的事情,那对我真的很有帮助!

2个回答

6
如果您在设置cookie时未指定路径或域,则默认为当前路径和当前主机名。如果您从具有不同路径或主机名的URL尝试设置相同的cookie名称,它将添加一个新cookie而不是替换旧cookie。
我猜想您想做的就是为您的网站和整个域设置一个全局路径的cookie。因此,可以这样做:
Set-Cookie: session=7878dfdsfjsdf89sd89f8df9; path=/; domain=.mysite.com

我觉得你已经解决了我的问题... 我简直要疯了 =D - RadiantHex
我可以将Cookie设置为覆盖所有路径吗? - RadiantHex
是的,将路径设置为 / 将覆盖您网站上的所有路径。 - Marc Novakowski

3
您可以使用response对象删除先前的cookie。
response.delete_cookie(cookie_key)

通过 request 对象中的 request.COOKIES 字典,可以获取 cookie 集合,并从中获取键。

由于您正在使用 Django,请参考以下示例在视图函数中执行此操作:

def my_view(request):
    # do some work and create a response object
    response = HttpResponse(some_content)

    # first delete any previously set cookie named "session"
    if 'session' in request.COOKIES:
        response.delete_cookie('session')

    # set the new cookie
    response.set_cookie('session', <cookie value goes here>')
    return response

谢谢,我该如何获取一个HTTP服务器来替换Cookie呢?当Web应用程序上线时,我将无法控制用户的计算机。 - RadiantHex
顺便说一下,我是通过Django手动发送“Set-Cookie”的,但无论如何Firefox都不会替换旧的cookie... - RadiantHex
这会让我的头发提前变灰 =) - RadiantHex
1
RadiantHex,查看更新以了解如何在Django视图中在服务器端执行此操作。 - ars

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接