Php 拉维5表格及&;过期疗程-是否有拉维咖啡因的替代品?

Php 拉维5表格及&;过期疗程-是否有拉维咖啡因的替代品?,php,laravel,session,laravel-5,Php,Laravel,Session,Laravel 5,因此,根据我在laravel 5.2中的经验,发生了以下情况: 在浏览器中,将显示带有(ajax)表单的页面 用户执行其他操作(例如回家) 当用户稍后返回并且会话过期时,他会收到一条错误消息,表明vrsf令牌无效(VerifyCsrfToken.php) 用户感到困惑 到目前为止,我还没有找到任何解决这个问题的内置解决方案。我正在使用,但感觉有点奇怪,我必须使用第三方库来解决这个基本问题。也许我错过了什么?您可以延长会话的到期时间。打开config/session.php并将“生存期”更改为

因此,根据我在laravel 5.2中的经验,发生了以下情况:

  • 在浏览器中,将显示带有(ajax)表单的页面
  • 用户执行其他操作(例如回家)
  • 当用户稍后返回并且会话过期时,他会收到一条错误消息,表明vrsf令牌无效(VerifyCsrfToken.php)
  • 用户感到困惑

到目前为止,我还没有找到任何解决这个问题的内置解决方案。我正在使用,但感觉有点奇怪,我必须使用第三方库来解决这个基本问题。也许我错过了什么?

您可以延长会话的到期时间。打开config/session.php并将“生存期”更改为您希望允许会话有效的时间


或者,在Exceptions/Handler.php中,侦听VerifyCsrfToken exception并向用户显示他需要刷新页面、再次登录等,我认为这是更好的选择,因为增加会话生存期会增加安全风险

您不必为此使用第三方软件包。它所做的只是在页面末尾添加一些JavaScript,在给定的时间间隔内通过Ajax ping服务器,以保持会话的活动性

CSRF令牌是通用安全概念的一部分。但是如果你确定你的任务不需要它,你可以告诉特定的路线不要麻烦它。在
/app/Http/Middleware/VerifyCsrfToken.php
中,您有一个数组,可以在其中添加要从CSRF验证中排除的路由:

/**
 * The URIs that should be excluded from CSRF verification.
 *
 * @var array
 */
protected $except = [
    //
];
但这可能不是最好的主意,因为您正在围绕一个安全概念工作

这只会防止抛出
tokenmischException
。如果您要发布到的控制器仍然依赖于活动会话,例如。G如果它需要登录用户或其他什么,这也帮不了你

因此,有几种解决方案:

  • 关闭该路由的CSRF验证。如果你知道自己在做什么,而且会议也无关紧要,那么就这样做
  • 挂接到
    \lightlight\Session\tokenmischException
    ,并向用户返回一条格式良好的消息,说明他们的会话已过期,并要求他们重新加载页面(我想这是推荐的方式)
  • 延长会话生命周期-正如@TheFallen已经说过的,显然不是最好的主意
  • 使用第三方软件包,或者自己添加一小段JavaScript

像“laravel caffeine”(发送“keep alive”消息)这样的解决方案的要点是,它实际上除了使会话持续时间无限长(会话永远不会过期)之外,什么都不做。在这种情况下,在我看来,您也可以简单地增加配置文件中的会话超时值——简单得多,最终我看不出有什么区别——或者“保持活动”解决方案仍然有安全优势吗?一般来说,我认为“正确”的解决方案确实是处理异常并向用户显示一条整洁的消息。@leo好吧,增加会话生存期和刷新会话以保持其活动性之间有很大的区别。如果您有很长的会话生存期,该会话将在浏览器重新启动后仍然有效,而您可能不希望重新启动浏览器。或者想象你的会话令牌被破坏了——攻击者将有更多的时间来做坏事。然而,如果你只是周期性地ping会话,以便仅在浏览器打开时重置短生存期,那么在保持有效会话所需的时间的同时,就不会出现该问题。Quasdunk是的,我明白你的意思-最大的区别确实是“保持活动”仅适用于存在的物理浏览器会话,而增加超时不能保证任何事情,从而打开滥用的大门。。。这是一个很大的不同,点!