【问题标题】:Really weird Cookie header behaviour? - Cookies真的很奇怪的 Cookie 标头行为? - 饼干
【发布时间】:2011-03-20 14:54:43
【问题描述】:

我使用 Firefox 3.6.8 进行这些测试。

我正在我的网络应用程序的响应标头中设置一个 cookie

Set-Cookie: session=7878dfdsfjsdf89sd89f8df9

似乎不会覆盖会话 Cookie。


当请求被执行时,Firefox 甚至会发送重复的 cookie

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

这是怎么回事?? 任何想法都会很棒! =)


这对我来说是非常灾难性的......如果有人能解释发生了什么,那真的会帮助我!

【问题讨论】:

    标签: python django http cookies http-headers


    【解决方案1】:

    如果您在设置 cookie 时未指定路径或域,则默认为当前路径和当前主机名。如果您继续尝试从具有不同路径或主机名的 URL 设置相同的 cookie 名称,它将添加一个新的 cookie 而不是替换旧的。

    我怀疑您想要做的只是为您的网站和整个域设置一个带有全局路径的 cookie。所以是这样的:

    Set-Cookie: session=7878dfdsfjsdf89sd89f8df9; path=/; domain=.mysite.com
    

    【讨论】:

    • 我想你已经解决了我的问题......我真的快疯了=D
    • 我可以设置Cookie覆盖所有路径吗?
    • 是的,将路径设置为仅 / 将覆盖您网站上的所有路径
    【解决方案2】:

    您可以使用response 对象删除之前的cookie。

    response.delete_cookie(cookie_key)
    

    这组 cookie 可通过 request.COOKIES 字典中的 request 对象获得,您可以从那里获取密钥。

    由于您使用的是 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?当网络应用上线时,我将无法控制用户的机器。
    • 顺便说一句,我正在通过 Django 手动发送“Set-Cookie”,但无论如何 Firefox 都不会替换旧的 cookie...
    • 这会让我的头发在时间之前变白 =)
    • RadiantHex,查看更新以了解如何在 django 视图中的服务器端执行此操作。
    猜你喜欢
    • 2022-10-29
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    相关资源
    最近更新 更多