我正在试图弄清楚如何只允许每个用户一个会话。 因此,如果有人在他已登录用户帐户时尝试登录,则第一个会话将被销毁并将被注销以仅允许当前会话。
我正在关注此事:How to keep single session per user in Laravel。但我不知道应该把这些代码放在哪里:
/**
* Swap a user session with a current one
*
* @param \App\User $user
* @return boolean
*/
protected function swapUserSession($user)
{
if (!($user instanceof \App\User)) {
return false;
}
$new_session_id = Session::getId(); //get new session_id after user sign in
$last_session = Session::getHandler()->read($user->last_session_id); // retrive last session
if ($last_session) {
Session::getHandler()->destroy($user->last_session_id);
}
$user->last_session_id = $new_session_id;
$user->save();
return true;
}
我目前正在使用Laravel 5.1,所以我能为Auth找到的唯一一个控制器是AuthController.php,但它说要把它放在LoginController.php上
答案 0 :(得分:1)
如果您正在使用文件驱动程序,则可以将以下方法添加到App \ Http \ Controllers \ Auth \ AuthController.php(在Laravel 5.2中测试)
command.ExecuteNonQuery();
答案 1 :(得分:0)
如果您正在使用5.3.15或更高版本的最新版本,我建议您查看我发布的有关此问题的以下链接。花了我一些时间来弄清楚,但我做了,修复非常简单。
首先(假设您已经干净地安装了laravel 5.3):
获取会话表并运行 -
转到存储在config / session.php中的会话配置文件,然后向下滚动到驱动程序配置。
默认情况下,应将其设置为' file'。
将此设置更改为'数据库'。 (如果要在数据库中存储会话)
在控制台的项目目录中,执行:
php artisan session:table
php artisan migrate
然后在以下链接中向下滚动到最后一条评论,并按照步骤修复会话问题。