Fork me on GitHub

Laravel仅允许单一会话存在实现


他说你任何为人称道的美丽 不及他第一次遇见你

在Laravel 中, 如果要实现用户的单点登录, 即系统中同一个用户仅仅允许一个会话(session)存在, 实现起来相当简单, 下面的代码是我在Laravel 5.5.13中试验的, 并不保证在其他版本的Laravel中可以使用, 但是思想同样可以借鉴;

修改user表

User模型对应的数据库表增加 session_id 字段, string类型;

修改登录控制器

/app/Http/Controllers/Auth/LoginController.php

1
2
3
4
5
6
7
8
9
10
public function authenticated(Request $request,User $user){
$previous_session = $user->session_id;
if ($previous_session) {
\Session::getHandler()->destroy($previous_session);
}
\Auth::user()->session_id = \Session::getId();
\Auth::user()->save();
return redirect()->intended($this->redirectPath());
}

验证

我们分别在不同的浏览器去用同一帐号尝试去登录我们的应用, 发现, 如果帐号在一个浏览器登录, 那么另外一个浏览器的帐号就会自动退出;

https://tiicle.com/items/327/laravel-applications-a-user-is-only-allowed-a-single-session