L5 随机 TokenMismatchExceptions

L5 random TokenMismatchExceptions

我在 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 网络工具,我可以确认所有请求都向服务器发送了完全相同的数据。

看来服务器端的令牌发生了变化。奇怪的是session文件中的token好像没有变,错误的token一直是我没见过的字符串,但总是莫名其妙的还原成原来的字符串。

这种情况经常发生,所以真的很烦人。一开始我以为可能是数据库session驱动的问题,但是我现在用的是文件驱动,而且还是这样。

更新

我一直有这个问题。我使用 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 5 一些 人的已知问题。

此处有关于此主题的公开 Github 问题单:https://github.com/laravel/framework/issues/8172

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

我建议你为那张票提供你的信息,并留意那里以获取更多信息。