Dav*_* Xu 6 php session laravel
Laravel 4中是否有可能一次只允许每个用户一个会话?
例如,如果用户登录并且已经有其他会话,则会取消其他会话,最好是提醒他们为什么?
我在Amazon ElastiCache上使用Redis会话驱动程序,如果这也有帮助的话.
xAo*_*Aoc 17
是的,我为我的项目做了类似的事情.
因此,在这种情况下,您需要向用户模型添加另一个属性:last_sessid.
public function swapping($user) {
$new_sessid = \Session::getId(); //get new session_id after user sign in
$last_session = \Session::getHandler()->read($user->last_sessid); // retrive last session
if ($last_session) {
if (\Session::getHandler()->destroy($user->last_sessid)) {
// session was destroyed
}
}
$user->last_sessid = $new_sessid;
$user->save();
}
Run Code Online (Sandbox Code Playgroud)
现在,如果用户具有活动会话,并在另一个浏览器中登录,则将删除第一个会话.
PS抱歉我的英文不好:)
小智 11
对于执行make:auth命令后的laravel 5.2,您可以创建方法:public function authenticated(Request $request,User $user)在AuthController.php中,在该方法中,您可以在登录后执行所需操作.对于每个用户的单个会话,我们将添加到顶部的AuthController:
use Illuminate\Http\Request;
use Auth;
Run Code Online (Sandbox Code Playgroud)
并添加功能:
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());
}
Run Code Online (Sandbox Code Playgroud)
请记住使用session_id列添加用于更改users表的迁移.
| 归档时间: |
|
| 查看次数: |
13967 次 |
| 最近记录: |