2012-10-16 73 views

回答

2

如果用戶刪除了他所有的cookies,那麼他是一個沒有cookies的用戶,對嗎?那麼你怎麼區分這個用戶和其他用戶呢?這是一個非常困難的問題,我懷疑它有一個可靠的解決方案。

例如,您可能想通過IP識別用戶,但IP可能會更改(動態IP)。您可能希望通過創建WebSocket(FlashSocket)連接來識別用戶並將其保持爲打開狀態,但只有當用戶查看您的頁面時(並且可能也會手動關閉),這纔會起作用。

因此忘記以前的會議。如果您需要清理會話數據,則創建一個CRON作業或後臺線程(或Node.JS的後臺異步作業),這將定期執行此操作。或者你可以使用被動清理,即會話實現機制,當接近(預定義的)內存限制(在創建新會話時應該觸發)時它會自行清理。

0

我只是將會話設置爲在redis中自動過期,所以它會隨着時間的推移自行清理。不幸的是,我忘了我是如何做到這一點的,我認爲它是db上的一個屬性。

當有人登錄了,我毀了會議:

req.session.destroy(function(){ 
//session has been destroyed 
}); 
+0

感謝您的評論,實際上是註銷我會破壞了會議,但如果客戶端刪除瀏覽器中的cookie,如何摧毀舊會話,因爲我使用快遞和連接,我發現通過調試,它會檢查請求是否有會話ID,它會繼續,否則它會產生新的會話。我可能是錯的,我的調試可能不是正確的方式。 – Dexter

+1

一旦cookie被刪除,用戶將獲得一個新的會話。你只是想偶爾在會話存儲中清理這些被放棄的會話。在redis中,你可以過期它們。 – chovy

+0

但我需要刪除我的全局中的舊會話數據,所以我需要舊的會話數據,是否有任何事件會在會話被破壞時發出,以便我可以訪問舊會話數據?糾正我,如果我錯了? – Dexter