我有一个关于身份验证的问题。我的身份验证控制器中有以下功能:
public function signout()
{
// set logged in status to zero in database
$l = Login::where('user_id', Session::get('user')->user_id)
->where('logged_in', 1)->first();
$l->logged_in = 0;
if ($l->save())
{
// log user out
Auth::logout();
// Forget user session data
Session::forget('user');
// redirect user to login page
return Redirect::to('/account/signin');
}
}
现在,在我的会话配置中,我已将会话设置为在 60 分钟后过期,之后用户显然会从系统中注销。但是,如果我没有执行其他功能,例如在数据库中将用户登录状态设置为零或忘记用户会话数组,就会发生这种情况。有没有办法可以在登录会话过期后触发这些函数执行?
我再次环顾四周,看看是否已经有解决方案。通过阅读文档,当我来到“事件”部分时,我感到很兴奋,因为我以为我找到了解决方案,但后来我发现没有这样的东西Session::expire
laravel 中的事件,也没有检查其他用户是否登录的功能。
您的整个前提是错误的:会话应该有一个在用户登录时设置的到期时间戳,并且如果您想要“会话在不活动 1 小时后超时”之类的内容,则应根据每个请求进行更新。
然后你基本上可以:
- 通过检查时间戳来检查用户执行请求时会话是否仍然有效
- 使用计划任务删除过期的会话,以便您在后台保持干净整洁
无论如何,如果由于某种原因你最终需要在用户注销时触发一些操作,Laravel 实际上有一个在用户注销时触发的事件:'auth.logout'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)