Session 使用laravel 5.5中的单个帐户限制在不同浏览器中多次登录

Session 使用laravel 5.5中的单个帐户限制在不同浏览器中多次登录,session,login,laravel-5.5,Session,Login,Laravel 5.5,例如,我想要像- 如果用户从google chrome登录并试图从Firefox登录,则上一个会话将自动销毁,并显示一条警告消息。 到目前为止,我已经做了以下工作,这实际上不是正确的方法,因为手动注销可以正常工作,但当用户由于会话超时或浏览器关闭或关闭而自动注销时,数据库不会按应有的方式更新- protected function authenticated(Request $request, $user) { $previous_token = $user->token_id; $to

例如,我想要像- 如果用户从google chrome登录并试图从Firefox登录,则上一个会话将自动销毁,并显示一条警告消息。 到目前为止,我已经做了以下工作,这实际上不是正确的方法,因为手动注销可以正常工作,但当用户由于会话超时或浏览器关闭或关闭而自动注销时,数据库不会按应有的方式更新-

protected function authenticated(Request $request, $user) 
{
$previous_token = $user->token_id;
$token = $request->session()->token();
if ($previous_token == NULL) {
 Auth::user()->token_id = $token;
    Auth::user()->save();
 }elseif ($previous_token == $token) {        }
else
 {
  if ($previous_token != $token) {
        Auth::logout();
    }
    }
}

  public function logout(Request $request, User $user)
{
    Auth::user()->token_id = NULL;
    Auth::user()->save();

    $this->guard()->logout();
    $request->session()->invalidate();
    return redirect('/');
}

请在这方面帮助我。提前感谢:)

一种方法是在用户登录时生成新的随机字符串/哈希值(您可以使用
stru random
helper函数和可选的
hash::make
来帮助您)作为令牌,然后将其存储在数据库和浏览器端(cookie,因此它不受会话超时的影响)

然后,您可以制作一个中间件或修改现有的中间件,以检查这两个令牌是否相同,并在不相同时注销用户(和/或提醒用户)


由于浏览器不共享cookie,使用其中一个浏览器登录将使另一个浏览器存储的令牌无效,从而结束该会话。

谢谢Pietro…但仍然找不到解决方案。如果可能,请更新我提供的代码!如果用户登录Firfox而未注销,则关闭borwser,然后从其他浏览器返回浏览器,他能从第二个浏览器登录吗?有另一种方法可以从laravel官方文档中找到,那就是-需要在你的app/Http/Kernel.php class'web中间件组中取消注释:
'web'=>[\light\Session\middleware\AuthenticateSession::class,],
然后
受保护的功能验证(请求$Request){$password=$Request->password;Auth::logoutOtherDevices($password);}