2010-01-11 62 views
2

我需要刪除以前爲父域的子域瀏覽主機時爲父域設置的cookie。無法從Django中的其他(父級)域獲取Cookie

即,爲example.com設置了一個cookie「xyz」,並且我試圖使用Django後端在subdomain.example.com上刪除它。

給視圖的request.COOKIES不包含除subdomain.example.com以外的任何cookie,所以我不能只寫入response.delete_cookie(...)以刪除它。

可以在Python或Javascript中執行這種刪除嗎?

回答

1

Cookie可能設置爲'域'參數。將cookie設置爲可以從Cookie的所有子域中訪問。

我不是python的人,但是我對http協議的瞭解表明這可能是問題所在。

+0

>將cookie設置爲可以從Cookie設置的域的所有子域訪問。 你究竟是什麼意思?是的,Cookie被設置(如Firebug中所示),其中domain = example.com。問題是我幾乎不可能影響cookie設置(代碼是用PHP編寫的,而不是Python,除非通過管理器層次結構等,否則我無法訪問其存儲庫),所以我試圖找到另一種解決方案。 – 2010-01-11 17:02:03

0

即使對於您無法閱讀的cookie,也可以嘗試撥打delete_cookie。 Django將輸出相關的Set-Cookie標題以刪除cookie。自然,您傳遞給delete_cookiedomainpath必須與您打算刪除的cookie匹配。

但是,如果您無法讀取cookie,則可能存在另一個問題,這可能會導致您無法刪除它。您確定父域中的Cookie設置了domain=parentdomain.tld參數嗎?如果不是,那麼它將不會在子域中可見或可刪除,除非在IE中由於該瀏覽器對沒有域指定的cookie的錯誤處理。

+0

根據Firebug的說法,來自父域的cookie設置爲domain =「。example.com」。我嘗試的第一件事是使用response.delete_cookie('xyz',domain ='。example.com')去除cookie,但沒有任何效果。 – 2010-01-11 17:36:29

+0

這應該肯定會對example.com的子域產生影響,只要cookie上沒有設置「路徑」,並且它不是僅限於https的cookie ......但如果是這樣的話,您也可以在服務器端獲取該cookie。在Preferences-> Privacy-> Show Cookies中檢查它。 – bobince 2010-01-11 22:42:24