我有一个使用自定义身份验证后端 ( CoSign )运行 Django 1.6 的站点。身份验证有效,但要注销,我需要删除 cookie。
这是注销前的 cookie,使用 Firebug:
这是我的注销视图:
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 仍然存在!任何人都可以解释为什么会发生这种情况?
我通过使用set_cookie()手动输入的到期日期而不是delete_cookie(). 此外,如果我在 Django 中设置域,它会加上一个句点前缀,这意味着它与现有的 cookie 不匹配。我没有输入域,它使用了默认值,这很有效。
| 归档时间: |
|
| 查看次数: |
5411 次 |
| 最近记录: |