gpt4 book ai didi

php - Laravel TokenMismatchException session 超时

转载 作者:可可西里 更新时间:2023-10-31 23:47:39 30 4
gpt4 key购买 nike

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

这会导致不需要的行为,就好像用户在他们的 _token 过期后提交了一个表单,他们现在收到一个 TokenMismatchException

在本地看来,当空闲时间超过 session 生命周期时,用户将被注销,但在实时服务器上的生产环境中,情况并非如此,空闲时间可以超过 session 生命周期,但用户仍处于登录状态如果用户已登录,Auth::check()Auth::user() 都会按预期运行。

什么会导致用户未注销,即使他们的 session 已过期?

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

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

我的 session 配置:

'driver' => 'database',

'lifetime' => 1440,

'expire_on_close' => false,

谢谢。

最佳答案

长期以来,我也一直在努力寻找解决这个问题的办法。 95% 的时间一切正常,但一些 AJAX 请求随机死于此 Illuminate\Session\TokenMismatchException 错误。

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

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

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

(/keepSessionAlive端点在web中间件组下,只返回{success: true})

希望它会有所作为:)

关于php - Laravel TokenMismatchException session 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27661785/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com