2012-09-09 41 views
0

我將在Django的會話cookie中存儲大量信息。我希望這些數據在用戶訪問網站的整個過程中保持不變。當他離開時,數據應該被刪除,但會話必須持續。我不想讓用戶每次回到網站都需要登錄。在瀏覽器上刪除Session段關閉

我發現了每次用戶離開網站時清除整個會話cookie的方法,但理想情況下我只想刪除我明確設置的cookie的選擇片段。有誰知道如何做到這一點?

+0

我認爲你需要讓你的問題更清楚。你想堅持什麼,你不想堅持什麼? SESSION_COOKIE_AGE對你來說不是很滿意嗎? –

回答

2

你有點混淆。

存儲在「Django的會話cookie」裏的唯一東西就是一個ID。該ID引用存儲在會話後端內部的數據:這通常是數據庫表,但可能是文件或緩存位置,具體取決於您的Django配置。

現在唯一一次數據更新是由Django修改的。除非Cookie本身過期(在這種情況下整個數據集保留在會話存儲中,但不再與客戶端關聯),或者通過在修改會話的服務器上運行進程,否則不能自動過期數據編程。

當用戶離開網站或關閉瀏覽器時,無法從服務器端進行告知。所以管理這個的唯一方法就是在你的服務器上運行一個cron作業,獲取最近修改(例如)兩小時前的會話,然後遍歷它們,刪除要刪除的數據。

+0

您也可以爲此使用'manage.py cleanup'! –

+0

好的。這是一個有效的答案,所以我需要一些幫助。我有一個照片應用程序,用戶可以在其中查看照片庫。通過點擊一個按鈕,他可以從服務器請求一組新的隨機照片。我需要將所有瀏覽的照片存儲在服務器上,以防止用戶看到重複。這些存儲在會話中。如果用戶第二次登錄,我希望他能夠看到以前瀏覽的照片,但我也想保留會話,因此他不需要再次登錄。有沒有其他地方可以爲特定用戶存儲這些照片?謝謝! – Nick

+0

這應該可能是一個新問題。訣竅是瞭解你的意思是「第二次登錄」。你將如何確定?你如何區分他們在他們的瀏覽器中保持一個標籤在你的網站上打開一個下午,與他們關閉並重新打開?一種方法是在會話中將last_accessed_time存儲在所查看照片的列表中:在下一次訪問時,如果時間戳太舊,請將其從會話中刪除,否則使用/更新它。 –