2014-10-06 161 views
0

說節點快速會話保存在應用程序(意味着它們不一定從傳入req訪問),如何檢查這些會話是否過期?什麼是正確的測試?檢查快速會話是否過期

+0

簡而言之,您只需檢查創建的時間戳和現在之間的時間是否大於ttl(或會話持續時間)。 – 2014-10-06 18:24:23

+0

當然是的,但是我會在什麼領域檢查以及如何?我必須檢查無效嗎? – JVerstry 2014-10-06 18:25:50

+0

我想這將取決於會話的存儲方式。例如,我將會話存儲在數據庫中,並定期刪除過期的會話。我想這一切都取決於你想要做什麼。你爲什麼需要這些信息。 – 2014-10-06 18:27:01

回答

-1

會議期間沒有發生任何事件過期(不幸...)。 但是,如果您的會話保存在會話存儲中,則可以在創建會話時實施setTimeout(),並在會話過期/即將過期時觸發事件。

例子:

//Lets say your session's ttl is 600 seconds 
//On session creation : 

setTimeout(function(){ 
    //send event 
},600000); 

根據什麼信息都存儲在您的會話商店,你可以使用任何你想要的用戶ID,或會話ID,或其他任何東西。

你可以看看at this SO question瞭解更多信息(雖然它使用了不推薦使用的連接,但概念是相同的)。

+0

這不起作用,因爲會話可以觸摸()。 – JVerstry 2014-10-06 18:29:08

+0

根據我的經驗,節點中的setTimeout是非常不可靠的。我會選擇檢查每個請求中沒有超過「expires」屬性。 – 2014-10-06 18:30:23

+0

@RobM。好主意,雖然在這種情況下setTimeout應該足夠了,但它不像OP需要刻度精度。另外,什麼是沒有要求?我不確定OP需要做什麼......我會使用超時來獲取商店中的TTL。如果會話已觸摸()編輯,我只需更新我的計時器並稍後重新檢查。 – xShirase 2014-10-06 18:32:06

0

假設您在會話中保存了用戶名。 req.session.name='pankti'當您嘗試獲取它時,如果它未定義,那麼它已過期。 req.session.name == 'undefined'