每次登录时生成新的django CSRF令牌

rep*_*vsd 1 javascript django csrf django-csrf csrf-protection

我希望我的网站登录表单每次刷新页面时都会生成一个新的CSRF令牌.

我试着打电话

logout(request)
request.session.flush()
Run Code Online (Sandbox Code Playgroud)

但即使在服务器重启后,隐藏的表单字段也始终具有相同的标记.

这显然意味着django正在从cookie中读取数据.如何使它忽略cookie并生成一个新的?

或者,有没有办法让我有一个中间页面,在进入实际登录页面之前清除所有cookie?如何在Javascript中删除我的域的所有cookie?

knb*_*nbk 6

您可以按如下方式手动重置令牌:

from django.middleware.csrf import _get_new_csrf_key

request.META["CSRF_COOKIE_USED"] = True
request.META["CSRF_COOKIE"] = _get_new_csrf_key()
Run Code Online (Sandbox Code Playgroud)

在Django> = 1.6中,您应该使用django.middleware.csrf.rotate_token(request),这正是这样做的.