我做了类似的事情。首先,我将会话保存在 Redis 中。对于每次登录,我都会在成功验证后保存会话 ID,并将其与用户 ID(它是数组)相关联。如果用户更改密码,您可以删除除当前用户会话之外的所有用户会话(使用会话 ID)。如果用户注销,您可以从用户会话数组中删除会话 ID。(我认为你可以使用MySQL或其他存储来保存用户和会话ID之间的关系)
我使用保存会话ID(当用户登录时)
$redis = \LRedis::connection();
$redis->sadd('user:sessions:' . $userId, Session::getId());
Run Code Online (Sandbox Code Playgroud)
用于从用户会话数组中删除会话 ID(如果用户注销或手动注销)
$redis->srem('user:sessions:' . $userId, $sessionId);
Run Code Online (Sandbox Code Playgroud)
删除 Laravel 会话(从其他设备注销用户)
$redis->del('laravel:' . $sessionId);
Run Code Online (Sandbox Code Playgroud)
获取用户的所有会话 ID
$redis->smembers('user:sessions:' . $userId);
Run Code Online (Sandbox Code Playgroud)
要从所有设备注销,请使用循环
$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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8505 次 |
| 最近记录: |