【发布时间】:2016-09-22 12:58:20
【问题描述】:
我正在构建一个 laravel 应用程序,其中一个用户登录了其他设备并且在注销时我想强制他也从其他设备注销。 我如何在 laravel 中实现。
我个人为此使用了 Redis Server。但我不知道为什么它不起作用。在运行程序时,我还运行了redis-server.exe。而且我在 Windows 中。这是我的控制器,我在其中编写了强制用户从其他设备注销的登录名。如果有人找到任何解决方案,请帮助我找出答案。在此先感谢。
控制器:
public function postSignIn(Request $request)
{
if (Auth::attempt(['email' => $request['email'], 'password' =>$request['password'] ]) ) {
$redis = \Redis::connection();
$userId = Auth::user()->id;
$redis->sadd('users:sessions:' . $userId,Session::getId());
return redirect()->route('main');
}
return redirect()->back();
}
public function getLogout()
{
$redis = Redis::connection();
$userId =Auth::user()->id;
$userSessions = $redis->smembers('user:sessions:' . $userId);
$redis->sadd('users:sessions:'.$userId,Session::getId());
$currentSession = Session::getId();
foreach ($userSessions as $sessionId) {
if ($currentSession == $sessionId) {
continue;
}
$redis->srem('user:sessions:' . $userId, $sessionId);
$redis->del('laravel:' . $sessionId);
}
Auth::logout();
return redirect()->route('main');
}
【问题讨论】:
-
如果我错了,请纠正我,但如果 Redis 存储类像这样
$redis->sadd($key, $value);工作,那么您只存储一个会话 ID,并且每个人都记录您正在覆盖前一个。 -
不,因为我有 dd() o/p 和不同的会话 ID。
-
您是否将
config/session.php中的会话驱动程序更改为 Redis,或者您只是使用 Redis 外观来存储会话 ID? -
在 config/session.php 我已将其更改为
'driver' => env('SESSION_DRIVER', 'redis'),问题是 Redis 没有在 Session 表中保存任何值我不知道为什么。 -
在你
.env文件中你有SESSION_DRIVER=redis吗?
标签: php laravel laravel-5 redis