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
原因尚不清楚,已经持续了一段时间。有很多聪明人在研究它 - 但问题的明显随机性使得调试变得困难。
我建议你为那张票提供你的信息,并留意那里以获取更多信息。
我在 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
原因尚不清楚,已经持续了一段时间。有很多聪明人在研究它 - 但问题的明显随机性使得调试变得困难。
我建议你为那张票提供你的信息,并留意那里以获取更多信息。