gpt4 book ai didi

php - Laravel 每个用户一个 session

转载 作者:可可西里 更新时间:2023-10-31 23:38:29 29 4
gpt4 key购买 nike

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

我正在关注: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 的 Controller 是 AuthController.php,但它说要把它放在 LoginController.php 上

最佳答案

如果您使用的是文件驱动程序,则可以将以下方法添加到 App\Http\Controllers\Auth\AuthController.php(已在 Laravel 5.2 中测试)

/**
* Only allow one concurrent session per user
*
* @param Request $request
* @param User $user
* @return Response
*/
protected function authenticated(Request $request, User $user)
{
Session::put('user_id', $user->id);

$files = array_diff(scandir(storage_path('framework/sessions')), array('.', '..', '.gitignore'));

foreach ($files as $file) {
$filepath = storage_path('framework/sessions/' . $file);
$session = unserialize(file_get_contents($filepath));

if ($session['user_id'] === $user->id && $session['_token'] !== Session::get('_token')) {
unlink($filepath);
}
}

return redirect()->intended($this->redirectPath());
}

关于php - Laravel 每个用户一个 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34247856/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com