Session 会话超时或在laravel中过期后触发函数

Session 会话超时或在laravel中过期后触发函数,session,authentication,laravel,Session,Authentication,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(

你好,我是拉威尔的新手,我有一个关于认证的问题。我的身份验证控制器具有以下功能:

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分钟后过期,之后用户显然将从系统中注销。但是,如果我的其他功能不执行,比如在数据库中将用户登录状态设置为零,或者忘记用户会话数组,就会发生这种情况。有没有办法在登录会话过期后触发这些函数执行?先谢谢你


更新:自从我的问题被否决后,我一直在四处寻找,看看是否已经有了解决方案,从阅读文档开始,当我来到“事件”部分时,我感到很兴奋,因为我认为我已经找到了解决方案,但后来我发现在laravel中没有“Session::expire”事件,也没有检查其他用户是否登录的功能。

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

然后你基本上可以:

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

  • 无论如何,如果出于某种原因,当用户注销时,您最终需要触发某些操作,那么Laravel实际上有一个在用户注销时触发的事件:“auth.logout”

    请在您的否决投票中附上一条评论,让我理解。我已经在线一整天,从会话过期事件中寻找解决方案,对于解码会话数据和检索用户id,有很多想法都没有找到有效的解决方案,我猜没有,所以我必须考虑其他一些问题。这是一个好问题。我还需要你(问了9个月后)正在寻找的东西。我希望你能找到解决办法。请在这里分享。我使用的是Laravel5.1。你的问题值得提出来vote@user3718908您不应该使用整数来定义用户是否登录。更好的方法是使用时间戳,每当用户加载一个页面时,该时间戳值超过60分钟,即,
    time()-strotime($user->last\u activity\u at)>3600时,该用户就会被称为注销!会话数组删除部分由Laravel自己处理!