2015-01-20 111 views
1

我們使用PHP並將會話數據存儲在memcached中。有沒有一種方法可以使給定用戶ID的所有會話無效?用例是,當用戶更改密碼時,我們將其註銷,但我們也應該使該用戶標識下的每個其他會話無效。通過用戶標識使PHP失效所有會話

這可能嗎?

回答

0

我想你必須在每個請求上添加一個檢查,以確保用戶上下文仍然有效。

首先想到的是在後端存儲中有一條記錄,其中包含用戶密碼已更新的時間戳記。當用戶登錄時,您可以使用時間戳寫入cookie或將其存儲在會話中。在隨後的請求/檢查時,只要cookie/session日期比它通過的密碼更改日期更新。當密碼更改時,後端記錄上的日期設置爲當前時間戳,並且下一次檢查將失敗並銷燬用戶會話。

所以在這種情況下,實際失效將不會發生,直到下一個請求來自舊會話。

+0

這是優雅的。我正在考慮將當前會話ID和用戶ID存儲在數據庫中,然後調用'session_id($ session_id_to_destroy);在session_start(); session_destroy(); session_write_close();' – Justin 2015-01-20 21:25:18

+0

需要考慮的一點是,您可能會遇到與實際會話存儲之間的同步問題。您必須保持用戶在該表中處於活動狀態的所有會話ID,並確保在用戶註銷或通過正常流程失效時將其刪除。 – 2015-01-20 21:28:50