用戶已登錄。他還已登錄到3臺不同的計算機。 現在用戶更改他的密碼。Laravel 5 - 從所有設備上註銷用戶
我想做點什麼讓他從他所有的設備中註銷。默認情況下,如果我們在一臺設備上更改密碼,其他設備上不會出現任何問題
首先要記住的是在中間件(每個請求)中檢查密碼是不好的,並顯着降低性能。
我如何在Laravel 5中做到這一點?
AND這樣做的最好方法是什麼?大型網站如何從所有設備註銷用戶?
用戶已登錄。他還已登錄到3臺不同的計算機。 現在用戶更改他的密碼。Laravel 5 - 從所有設備上註銷用戶
我想做點什麼讓他從他所有的設備中註銷。默認情況下,如果我們在一臺設備上更改密碼,其他設備上不會出現任何問題
首先要記住的是在中間件(每個請求)中檢查密碼是不好的,並顯着降低性能。
我如何在Laravel 5中做到這一點?
AND這樣做的最好方法是什麼?大型網站如何從所有設備註銷用戶?
我做了類似的事情。起初,我在Redis中保存會話。對於每次登錄,我都會在成功認證後保存會話ID,並將其與用戶ID(它是數組)關聯起來。如果用戶更改密碼,則可以刪除除當前的所有用戶會話(使用會話ID)。如果用戶註銷,您可以從用戶會話數組中刪除會話ID。 (我想你可以使用MySQL或其他存儲保存用戶和會話ID之間的關係)
爲救我使用會話ID(用戶登錄)
$redis = \LRedis::connection();
$redis->sadd('user:sessions:' . $userId, Session::getId());
用於刪除會話ID從用戶會話的陣列(如果用戶註銷或手動註銷)
$redis->srem('user:sessions:' . $userId, $sessionId);
除去Laravel會話(從其他設備註銷用戶)
$redis->del('laravel:' . $sessionId);
獲取用戶
$redis->smembers('user:sessions:' . $userId);
所有會話ID爲註銷所有設備都使用循環
$userSessions = $redis->smembers('user:sessions:' . $userId);
$currentSession = Session::getId()
foreach ($userSessions as $sessionId) {
if ($currentSession == $sessionId) {
continue; //if you want don't remove current session
}
$redis->del('laravel:' . $sessionId);
$redis->srem('user:sessions:' . $userId, $sessionId);
}
我已經實現了你所建議的同樣的過程,但是我面臨着以下錯誤。請你幫我找出答案。 ConnectionConnection.php中的ConnectionException第168行:由於目標機器主動拒絕它,因此無法建立連接。 [tcp://127.0.0.1:6379]' – Hola
嗨嘗試連接到redis使用redis cli'redis-cli' – dyachenko
我已經更新了幾乎相同的問題。你能幫我找出答案嗎? http://stackoverflow.com/questions/37405740/laravel-5-2-how-to-logout-a-user-from-all-of-his-devices – Hola
是否有可能獲得通過用戶ID的會話?這樣,如果用戶更改密碼,您可以檢查他們是否有其他活動的會話,然後將其刪除? – haakym
你使用什麼類型的會話驅動程序? – baao
@michael我正在使用memcached – Sky