Laravel TokenMismatchException 会话超时

2023-12-21

我遇到一个问题,当用户闲置超过 24 小时(我的会话超时),或者离开网站并在 24 小时后返回时,他们不会从网站注销,但他们的会话正在被注销已过期,或者至少他们的 _token 不再有效。

这会导致不必要的行为,就好像用户在 _token 过期后提交表单,并且现在收到一个TokenMismatchException.

在本地看来,当空闲时间超过会话生命周期时,用户会被注销,但是在实时服务器上的生产中,情况并非如此,空闲时间可能超过会话生命周期,但用户仍然登录并且Auth::check() and Auth::user()如果用户登录,两者都会按预期运行。

即使会话已过期,什么会导致用户无法注销?

有没有办法检查会话是否已过期,以便我可以手动注销用户并显示一条消息要求他们重新登录?

我尝试过使用App::before过滤器检查会话上的last_activity并确定它是否已过期,但是一旦会话过期,我就无法再访问它,因为它已从数据库中删除,因此我无法比较时间戳来确定用户是否需要手动退出并提示重新登录。

我的会话配置:

'driver' => 'database',

'lifetime' => 1440,

'expire_on_close' => false,

Thanks.


我也一直在努力寻找解决这个问题的方法很长一段时间。 95% 的情况下一切都很顺利,但一些 AJAX 请求会因此随机终止Illuminate\Session\TokenMismatchException error.

刚才我部署了一个快速而肮脏的修复——我将这段代码放入布局中:

setInterval(function () {
  $.get(window.location.origin + '/keepSessionAlive')
    .fail(function(response) {
      Sentry.trackError(
        'KeepSessionAlive request failed. ' +
        'Response: ' + JSON.stringify(response)
      );
    });
}, 300000);

就像转储一样,它只是每 5 分钟向服务器发送一个请求,以确保会话保持活动状态。

(The /keepSessionAlive端点位于web中间件组并返回{ success: true })

希望它会有所作为:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Laravel TokenMismatchException 会话超时 的相关文章

随机推荐