为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
慕桂英3389331 2021-11-05 15:26:26
我有一个网络应用程序,它正在以自助服务终端模式在笔记本电脑上等待用户。有时,注册失败,用户会收到错误屏幕 - 我认为是 419 Session Expired。所以我假设登录屏幕加载两个小时后,会话过期(我在 中保留了默认值 120 分钟config/session.php)并且 Laravel 不接受来自该页面的任何请求。我该如何处理?我知道如何使用 JS 每隔 110 分钟左右重新加载一次页面,但是我必须检查此时是否正在填写注册表。这对我来说不是一个干净的解决方案。是否有其他替代方法,例如当请求来自注册或登录页面时使 Laravel 不那么严格的机制?
查看完整描述

3 回答

?
白板的微信

TA贡献1883条经验 获得超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 调用的会话过期响应,然后刷新页面、提示输入凭据或在检测到会话过期时执行一些其他操作。如果计算机从睡眠状态恢复运行,则最有可能发生这种情况。


查看完整回答
反对 回复 2021-11-05
?
侃侃无极

TA贡献2051条经验 获得超10个赞

您注意到自己可以在 中更改会话时间config/session.php。你有什么不想改变的理由吗?


或者,假设这不是可在万维网上访问的应用程序并且仅供 Kiosk 使用,您可以完全排除某些路由需要 CSRF 令牌;


编辑**$except**VerifyCsrfToken中间件的属性;


protected $except = [

    'stripe/*',

    'http://example.com/foo/bar',

    'http://example.com/foo/*',

];

从Laravel 文档中获取的信息。


查看完整回答
反对 回复 2021-11-05
?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

我想你可能想看看这个包:

laravel-咖啡因

希望能帮助到你 :)


查看完整回答
反对 回复 2021-11-05
  • 3 回答
  • 0 关注
  • 181 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信