用户会话在Laravel 5.5中过期时自动重定向

时间:2018-04-05 16:28:32

标签: php laravel authentication laravel-5.5

当用户会话使用Laravel功能到期时,我想自动重定向到我的登录页面。 当用户尝试访问另一个页面并且会话过期时,我会重定向。 我设置的生命周期有助于自动注销,因为用户不活动,我想要的是在会话超时时立即重定向。

我尝试使用JavaScript来超时,但是当用户一次使用多个页面时,这不起作用。

我也尝试过使用AJAX,每分钟发送检查会话状态的请求,这样可行,但是当项目投入生产时,服务器的许多请求只是为了检查会话状态。 (这是帮助我https://laracasts.com/discuss/channels/laravel/help-is-neededd-on-idle-session-time-out

的链接

现在,我尝试使用 app / Exceptions / Handler.php ,使用 unauthenticated()函数:

protected function unauthenticated($request, AuthenticationException $exception)
{
  if ($request->expectsJson()) {
        return response()->json(['error' => 'Unauthenticated.'], 401);
    }

    return redirect()->guest(route('login'));
}

Redirect User to Login Page When Session Expires - Laravel

这最后一个解决方案无法正常工作,不会出现任何错误,但绝对没有任何错误。

如果可能,请告诉我正确的方法。

2 个答案:

答案 0 :(得分:2)

由于您的会话具有固定的生命周期,您可以将该信息传递给客户端,并让客户负责查询服务,以确定在您期望会话过期时会话到期,从而不会不断查询您的服务对于他们的会话状态,他们只是在它可能已经过期的时候查询。

  1. 用户向您的网站提出请求
  2. 中间件生成一个时间戳,表示会话过期的时间点,并将其返回给客户端以存储为cookie
  3. Javascript在客户端上运行,从cookie中检索其会话到期时间戳,然后在达到该时间戳时检查cookie值是否已更改,如果没有,则向会话状态端点发出请求以确认他们的会话不再有效
  4. 您的会话状态端点返回过期状态(触发非活动会话行为)它返回一个新的时间戳,然后您可以更新cookie,以便在该过期时该过程再次重复到达
  5. 我个人建议在会话过期时自动将某人重定向到登录表单,因为这意味着当他们打开多个页面时,每个页面现在都是登录表单,这是一个糟糕的用户经验。许多技术用户会理解他们可以在一个页面上登录然后刷新其他页面,但是许多非技术人员不会这样做,他们会相信他们必须在每个页面上输入用户名和密码。

    如果您的应用程序甚至在页面加载后依赖于活动会话 - 即它是使用ajax的单页应用程序 - 那么当会话到期时,您应该禁用具有“您的会话已过期的模式”的页面,请再次登录以继续使用此页面“当他们点击登录时,您首先检查他们是否有活动会话,如果不是,那么您是否重定向到登录表单。这意味着如果他们打开了许多选项卡并且会话过期,当他们返回到这些选项卡并单击“登录”按钮时,他们的页面将立即恢复使用。这是一种更好的用户体验。

答案 1 :(得分:0)

您可以使用if(Auth::check()) { //Do anything you want } return redirect('/login');

front-page.php