6

我已经按照Django 文档中的描述设置了 CSRF (使用 Django 1.3)。它适用于 FF 和 Safari,但在 IE9 上我得到

<div id="summary">
<h1>Forbidden <span>(403)</span></h1>
<p>CSRF verification failed. Request aborted.</p>
</div>

在我发现的 Ajax 请求的响应标头中

Set-Cookie  csrftoken=8db3637951243ffb591e6b2d6998ed03; expires=Fri, 14-Sep-2012 08:01:52 GMT; Max-Age=31449600; Path=/

当以正常形式使用它时(即不涉及 Ajax),它可以在 IE9 中使用。

我在 nginx/1.1.2 后面使用 Django。

任何提示我在这里缺少什么?

4

3 回答 3

3

如果您的表单位于 iframe 中,可能的原因是 IE 阻止第三方 cookie 的默认策略。你可以

Django 的票#17157建议在文档中添加有关此问题的注释。

于 2011-11-03T07:15:55.547 回答
3

我有同样的问题,对我来说问题是我没有指定表单动作属性。IE 显然不允许这样做。

于 2013-04-12T14:51:28.253 回答
1

在 Django 的票#17157(感谢@akaihola 的链接)中指出,问题在于 Internet Explorer 默认会阻止第三方 cookie。因此,您可以在浏览器设置中为所有站点或仅为您的站点启用第三方 cookie。以下是在 IE 7 中执行此操作的方法(来自此链接):

  1. 点击“工具”菜单
  2. 单击“Internet 选项”
  3. 选择“隐私”选项卡

选项 1:为所有网站启用第三方 cookie

  1. 点击“高级”
  2. 选择“覆盖自动 cookie 处理”
  3. 选择“第三方 Cookies”下的“接受”按钮,然后单击“确定”

或者

选项 2:仅为 Feedjit.com 启用第三方 cookie

  1. 点击“网站”
  2. 添加“ your-domain.com ”并单击“允许”
  3. 点击“确定”
  4. 选择“第三方 Cookies”下的“接受”按钮,然后单击“确定”
于 2015-02-24T12:01:12.703 回答