Django不删除cookie

tao*_*oat 7 django cookies

我有一个使用自定义身份验证后端 ( CoSign )运行 Django 1.6 的站点。身份验证有效,但要注销,我需要删除 cookie。

这是注销前的 cookie,使用 Firebug:

  • 名称:cookie_name
  • 域:cookie_domain
  • 小路: /
  • 过期:会话
  • 安全性:安全

这是我的注销视图:

from django.contrib.auth.views import logout as django_logout

def logout(request):
    if request.user.is_authenticated():
        response = django_logout(request,
                                 next_page=reverse("logout-confirmation"))
        response.delete_cookie('cookie_name',
                               domain="cookie_domain")
        return response
    else:
        messages.add_message(request,
                             messages.ERROR,
                             "You can't log out if you aren't logged "
                             "in first!")
        return HttpResponseRedirect(reverse("frontpage"))
Run Code Online (Sandbox Code Playgroud)

我的代码中的 cookie_name 和 cookie_domain 与 cookie 的实际名称和域匹配。

以下是注销视图的响应标头:

Connection: "close"
Content-Length: "0"
Set-Cookie: "{{ cookie_name }}=; Domain={{ cookie_domain }}; expires=Thu, 01-Jan-1970 00:00:00 GMT; Max-Age=0; Path=/sessionid=25lysb3tzhozv464mrgg08uqz100ur39; expires=Mon, 15-Sep-2014 19:07:22 GMT; httponly; Max-Age=1209600; Path=/"
Vary: "Cookie"
Run Code Online (Sandbox Code Playgroud)

但是,转到我的注销视图后,cookie 仍然存在!任何人都可以解释为什么会发生这种情况?

tao*_*oat 5

我通过使用set_cookie()手动输入的到期日期而不是delete_cookie(). 此外,如果我在 Django 中设置域,它会加上一个句点前缀,这意味着它与现有的 cookie 不匹配。我没有输入域,它使用了默认值,这很有效。