2012-09-01 31 views
0

我使用gae-sessions永不過期的會話。客戶端是一個iOS應用程序,我希望會話在應用程序的整個生命週期內持續存在(所以會話過期或無效的唯一方式是當用戶註銷或用戶刪除應用程序時,其他方式會話沒有到期日期)。我不認爲我想使用Cookie,因爲Cookie是短暫的(或者我應該怎麼辦?)清理在谷歌應用程序引擎

所以我在做的是創建一個新的會話,獲取該會話的自動生成的SID(會話ID,一個隨機字符串),並將該字符串發送回客戶端並將其保存在那裏。現在每個用戶發送請求時,會話ID也被送到了,我也得到使用該ID當前會話:

# gets the session with given session id 
session = gaesessions.Session(sid = session_id) 

首先,是什麼毛病這種做法?有一個更好的方法嗎?

現在,當用戶註銷時,可以很容易地提交給會議指定id無效的請求。但是,如果用戶刪除應用程序,我將無法獲取該會話並刪除它。那麼我將如何清理不再有效的會話?

回答

1

我不知道爲什麼你需要一個會話的。只需將數據存儲在數據存儲中的某個每個用戶對象中即可。然後很容易引用該用戶。我假設你已經存儲了會話以外的用戶數據。

這個答案並不雖然解決這個問題,你永遠不知道,如果一個用戶刪除應用程序,讓您有用戶數據撒手人寰。這不僅僅是一個技術問題,更是一個政策問題。

如果你想刪除用戶數據,你需要設置某種政策(即如果你沒有在2年內登錄,我們正在刪除帳戶)的。在這種情況下,您的到期時間基本上是2年。您需要定期運行的cron作業清理過期的用戶(或會話)。

順便說一句,GAE的會話包括用於過期會話,包括一個cron處理程序例如清理代碼。