会话超时后触发功能或在laravel中到期

use*_*908 7 authentication session laravel

你好,我是laravel的新手,我有一个关于身份验证的问题.我的身份验证控制器中有以下功能:

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');
        }
    }
Run Code Online (Sandbox Code Playgroud)

现在在我的会话配置中,我已将会话设置为在60分钟后过期,之后用户显然将退出系统.但是,如果没有执行其他功能,例如在数据库中将用户登录状态设置为零或忘记用户会话数组,则会发生这种情况.有没有办法可以在登录会话到期后触发这些函数执行?先感谢您.

更新:我一直在四处寻找,因为我对我的问题进行了投票,看看是否已经有了解决这个问题,从阅读文档时我很兴奋当我来到"事件"部分,因为我认为我我找到了一个解决方案,但后来我发现laravel中没有"Session :: expire"事件,也没有检查其他用户是否登录的功能.

小智 1

您的整个前提是错误的:会话应该有一个在用户登录时设置的到期时间戳,并且如果您想要“会话在不活动 1 小时后超时”之类的内容,则应根据每个请求进行更新。

然后你基本上可以:

  1. 通过检查时间戳来检查用户执行请求时会话是否仍然有效
  2. 使用计划任务删除过期的会话,以便您在后台保持干净整洁

无论如何,如果由于某种原因你最终需要在用户注销时触发一些操作,Laravel 实际上有一个在用户注销时触发的事件:'auth.logout'