【问题标题】:L5 random TokenMismatchExceptionsL5 随机 TokenMismatchException
【发布时间】:2015-05-24 22:51:07
【问题描述】:

我在 Laravel 5 中得到随机的 TokenMismatchExceptions。在 tokensMatch() 函数中使用以下代码我一直在尝试调试这个奇怪的问题:

Log::debug($request->session()->token(). ', ' . $token);

输出如下:

[2015-03-21 17:04:22] local.DEBUG: XJhAXXQumM0JLX9tFcQn1tQZMI1FtglDFuhi8abT, XJhAXXQumM0JLX9tFcQn1tQZMI1FtglDFuhi8abT  
[2015-03-21 17:04:34] local.DEBUG: XJhAXXQumM0JLX9tFcQn1tQZMI1FtglDFuhi8abT, XJhAXXQumM0JLX9tFcQn1tQZMI1FtglDFuhi8abT  
[2015-03-21 17:04:36] local.DEBUG: snE0IERJ1VY0o4qmSMuHb4wH9lhQUf5ZtVObOFnR, XJhAXXQumM0JLX9tFcQn1tQZMI1FtglDFuhi8abT  
[2015-03-21 17:04:36] local.ERROR: exception 'Illuminate\Session\TokenMismatchException' in vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\VerifyCsrfToken.php:47
Stack trace:
[...]
[2015-03-21 17:07:30] local.DEBUG: XJhAXXQumM0JLX9tFcQn1tQZMI1FtglDFuhi8abT, XJhAXXQumM0JLX9tFcQn1tQZMI1FtglDFuhi8abT

如您所见,前 2 个请求成功,第 3 个请求失败,第 4 个请求再次成功。我一直在使用 Fiddler 和 Chrome 网络工具,我可以确认所有请求都向服务器发送了完全相同的数据。

所以看起来令牌在服务器端发生了变化。奇怪的是会话文件中的token似乎并没有改变,而且错误的token总是一个我以前没见过的字符串,但总是以某种方式恢复到原来的字符串。

这种情况经常发生,所以真的很烦人。首先我认为这可能与数据库会话驱动程序有关,但我现在正在使用文件驱动程序并且它仍在发生。

更新

我一直有这个问题。我使用 php artisan serve 在不同的 PC 和不同的项目上使用它。我也有它在不同的服务器和不同的项目(nginx 1.6.2,PHP 5.6.7)。

I'm not the only one with this problem.

调试非常困难,因为它是随机发生的,有时它会在一段时间内不显示,然后突然连续发生很多次,或者只发生一次。通过简单地重新提交 POST 请求,它有时会再次工作,或者有时会导致另一个异常。

我在所有项目中添加到composer.json 的唯一内容是"illuminate/html": "5.*"。所有作曲家包都是最新的。

一旦我有更多关于这个非常奇怪的问题的信息,我会更新这个问题。

另一个更新

我创建了一个新的 L5 项目,并添加了一些最少的代码来重现此错误。我所做的更改可以看到here(以及完整的测试项目)。我现在将尝试对这个项目进行一些调试。

【问题讨论】:

  • 你是否对 Laravel 会话配置进行了任何修改?
  • 是的,我已将驱动程序更改为数据库,但我已将其恢复为文件,因为我认为它可能导致了问题,但问题仍然存在。
  • 你的设置是什么?即 Apache/Nginx、PHP 版本等。另外,你能告诉我存储在 cookie 中的令牌是否发生变化吗?您可以通过开发者工具 > 资源 > Cookies 做到这一点
  • 另外,您是否在应用程序中使用任何 AJAX?
  • 我使用的是 PHP 5.6.5 和内置的 Web 服务器。我没有在我的应用程序中使用任何 AJAX。令牌似乎没有改变,但我明天会更仔细地观察它。

标签: php laravel csrf laravel-5


【解决方案1】:

对于一些人来说,这是 Laravel 5 的一个已知问题。

这里有一个关于这个主题的开放 Github 问题票:https://github.com/laravel/framework/issues/8172

原因尚不清楚,已经持续了一段时间。有很多聪明人在研究它 - 但这个问题明显的随机性使其难以调试。

我建议您将您的信息提供给该票证,并密切关注那里以获取更多信息。

【讨论】:

  • 他们没有解决就关闭了问题。
  • 更新:这是L5.2的一个问题和可能的解决方案
猜你喜欢
  • 1970-01-01
  • 2015-10-04
  • 2016-10-03
  • 1970-01-01
  • 2016-03-06
  • 2017-03-28
  • 2015-03-12
  • 1970-01-01
相关资源
最近更新 更多