Laravel每个用户一个会话

时间:2015-12-13 04:03:02

标签: php laravel session laravel-5.1

我正在试图弄清楚如何只允许每个用户一个会话。 因此,如果有人在他已登录用户帐户时尝试登录,则第一个会话将被销毁并将被注销以仅允许当前会话。

我正在关注此事: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上

2 个答案:

答案 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

然后在以下链接中向下滚动到最后一条评论,并按照步骤修复会话问题。

https://github.com/laravel/framework/issues/15821