繁体   English   中英

Laravel允许每个用户一个会话

[英]Laravel allow one session per user

我试图每个用户只允许一个会话。 因此,如果有人在他已登录用户帐户时尝试登录,则不允许用户登录。 第二个用户只有在第一个用户从其帐户注销时才能登录。

我正在使用sentinel进行身份验证。 所以,我在登录方法中添加了以下代码。

$user = \App\Models\User::where('email', $request->input('email'))->first();

if (!empty($user) && isset($user->session_id) && !empty($user->session_id))
{
     return redirect()->back()->withErrors('First logout in other device')->withInput();
}

我在users表中添加了session_id。 用户登录时,它会在DB中为该用户存储session_id。

$session_id = \Session::getId();
Sentinel::update($user, ['session_id' => $session_id]);

我在注销功能中添加了以下代码

Sentinel::update($user, ['session_id' => '']);
\Session::flush();

它正在一个流程中,第一个用户登录到一个设备。同时尝试使用其他设备登录,他将无法登录到第二个设备。 现在如果他从第一个设备session_id注销将是空白的。 所以现在他将能够登录第一台设备。

现在这里的问题是,如果会话自动销毁或用户关闭浏览器,那么将不会调用logout方法并且session_id不会为空? 即使用户未登录第一个设备,他也无法登录其他设备。

我怎么解决这个问题?

最好使用redis。 记录登录的用户,并在登录时考虑超时,并且不做任何事情将其遗漏。

在laravel redis

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM