Laravel:当注册表打开时会话到期

我有一个网络应用程序,它正在以自助服务终端模式在笔记本电脑上等待用户。有时,注册失败,用户会收到错误屏幕 - 我认为是 419 Session Expired。

所以我假设登录屏幕加载两个小时后,会话过期(我在 中保留了默认值 120 分钟config/session.php)并且 Laravel 不接受来自该页面的任何请求。

我该如何处理?我知道如何使用 JS 每隔 110 分钟左右重新加载一次页面,但是我必须检查此时是否正在填写注册表。这对我来说不是一个干净的解决方案。

是否有其他替代方法,例如当请求来自注册或登录页面时使 Laravel 不那么严格的机制?


慕桂英3389331
浏览 183回答 3
3回答

白板的微信

如前所述,最简单的解决方案通常是将会话过期时间从默认的 2 小时(非常短)延长。如果不需要更长的会话,另一种选择是使用 javascript 使会话保持活动状态,只要浏览器页面处于打开状态。在routes/web.php 中添加路由:Route::post('/keep-alive', function () {    return response()->json(['ok' => true]);});然后使用 javascript 定期 ping 这条路线:setInterval(() => {    axios.post('/keep-alive')        .then(() => {})        .catch(() => {})}, 600000)(我使用 axios 发出 POST 请求,因为它包含在默认的 Laravel 安装中,但您可以使用任何东西来发出请求。)由于请求通过web中间件组,因此应该运行会话中间件并保持会话处于活动状态。如果浏览器页面关闭,计算机进入睡眠状态等,那么在配置的时间过去后,会话仍将正常过期。您还可以检查来自 javascript 调用的会话过期响应,然后刷新页面、提示输入凭据或在检测到会话过期时执行一些其他操作。如果计算机从睡眠状态恢复运行,则最有可能发生这种情况。

侃侃无极

您注意到自己可以在 中更改会话时间config/session.php。你有什么不想改变的理由吗?或者,假设这不是可在万维网上访问的应用程序并且仅供 Kiosk 使用,您可以完全排除某些路由需要 CSRF 令牌;编辑**$except**VerifyCsrfToken中间件的属性;protected $except = [    'stripe/*',    'http://example.com/foo/bar',    'http://example.com/foo/*',];从Laravel 文档中获取的信息。

qq_花开花谢_0

我想你可能想看看这个包:laravel-咖啡因希望能帮助到你 :)
打开App,查看更多内容
随时随地看视频慕课网APP