Laravel 5形式&&过期的会议 - 是否有laravel-caffeine的替代品?

时间:2016-06-23 09:13:03

标签: php laravel session laravel-5

根据我的经验,即使在laravel 5.2中,也会发生以下情况:

  • 在浏览器中显示带有(ajax)形式的页面
  • 用户做了其他事情(例如回家)
  • 当用户稍后返回并且会话过期时,他会收到一条错误消息,指出vrsf令牌无效(VerifyCsrfToken.php)
  • 用户感到困惑

到目前为止,我没有找到针对此问题的任何内置解决方案。我正在使用https://github.com/GeneaLabs/laravel-caffeine但是我必须使用第三方库来解决这个基本问题感觉有点奇怪。也许我错过了什么?

2 个答案:

答案 0 :(得分:1)

您可以增加会话到期的时间。打开 config / session.php 并将' life' 更改为您希望会话有效的时间。

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

答案 1 :(得分:1)

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

CSRF-Token是常见安全概念的一部分。但是如果你确定你不需要那个任务,你可以告诉具体的路线不要打扰它。在/app/Http/Middleware/VerifyCsrfToken.php中,您有一个数组,您可以在其中添加要从CSRF验证中排除的路由:

/**
 * The URIs that should be excluded from CSRF verification.
 *
 * @var array
 */
protected $except = [
    //
];

但这可能不是最好的主意,因为你正在研究安全概念。

这只会阻止TokenMismatchException被抛出。如果您要发布的控制器仍依赖于活动会话,例如: G。如果它需要登录用户或其他东西,这也无济于事。

所以,有几个解决方案:

  • 关闭该路线的CSRF验证。如果您知道自己在做什么以及会话无关紧要
  • ,请执行此操作
  • 挂钩\Illuminate\Session\TokenMismatchException并向用户返回一个格式正确的消息,告知他们的会话已过期并要求他们重新加载页面(我猜这将是推荐的方式)
  • 延长会话生命周期 - 正如@TheFallen已经说过的那样,显然不是最好的主意
  • 使用第三方软件包或只是自己添加一小段JavaScript。