2011-09-16 103 views
6

我已經設置了CSRF,如Django docs(使用Django 1.3)中所述。它的工作原理與FF和Safari,但IE9我得到CSRF驗證失敗,但只有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=/ 

它在一個正常的形式使用時,它工作在IE9(即無涉及Ajax)。

我在nginx/1.1.2後面使用Django。

任何提示我在這裏失蹤?

回答

3

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

Django的門票#17157建議增加有關此問題的文檔中的說明。

2

我有同樣的問題,對我來說問題是我沒有指定窗體操作屬性。 IE顯然不允許這樣做。

1

在Django的票#17157(感謝@akaihola的鏈接)中指出,問題在於Internet Explorer默認阻止第三方Cookie。因此,您可以爲所有網站啓用第三方Cookie,或者僅爲瀏覽器設置中的網站啓用第三方Cookie。 這裏是如何做到這一點在IE 7中(從this link):

  1. 單擊 「工具」 菜單
  2. 點擊 「Internet選項」
  3. 選擇 「隱私」 選項卡

選項1:爲所有網站啓用第三方Cookie

  1. 單擊「高級」
  2. 選擇「覆蓋自動cookie處理」
  3. 選擇「第三方Cookie」下的「接受」按鈕,然後單擊「確定」

OR

選項2:啓用第三方cookie只是Feedjit.com

  1. 單擊 「站點」
  2. 添加「您的域。COM「並點擊‘允許’
  3. 單擊‘確定’
  4. 選擇‘接受第三方Cookies’按鈕下的‘’,然後單擊‘確定’