为什么csrftoken cookie有效?

时间:2017-07-28 06:45:27

标签: django django-csrf

我正在从Django 1.4.3升级到Django 11.3。

我有一个包含2种不同表格的网页。两个表单都加载了{%csrf_token%}。流程是 - 用户使用表单1(ajax)登录,然后显示第二个表单。用户以第二种形式输入数据并使用ajax提交。现在,如果我做了这个请求失败了(在Django 1.4.3下工作) -

csrfmiddlewaretoken = $form.find('input[name="csrfmiddlewaretoken"]').val();

现在,为了解决这个问题,我从cookie获取csrftoken值并将cookie作为ajax的一部分发送并且它有效 -

csrfmiddlewaretoken = _getHelperCookie('csrftoken');

我很困惑为什么让客户端cookie工作?登录后,Django调用rotate_token;实际上这会影响什么?

1 个答案:

答案 0 :(得分:1)

正如您所说,当您作为安全措施登录时,Django会轮换CSRF令牌。这started in Django 1.5.2

由于您已使用ajax请求登录,因此旧令牌仍在html中。从html中获取令牌时,您使用的是旧令牌,因此会出现CSRF错误。

当您从cookie中获取令牌时,您将获得新令牌,以避免错误。

相关问题