L5随机TokenMismatchExceptions

Lou*_*sen 3 php csrf laravel laravel-5

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

Log::debug($request->session()->token(). ', ' . $token);
Run Code Online (Sandbox Code Playgroud)

输出如下:

[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
Run Code Online (Sandbox Code Playgroud)

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

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

这经常发生,所以它真的很烦人.首先我认为它可能是关于数据库会话驱动程序的东西,但我现在正在使用文件驱动程序,它仍然在发生.

更新

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

我不是唯一有这个问题的人.

调试非常困难,因为它随机发生,有时它不会出现一段时间,然后突然连续多次发生,或者只发生一次.只需重新提交POST请求,它有时会再次运行,或者有时会导致另一个异常.

composer.json在所有项目中添加的东西都是"illuminate/html": "5.*".所有作曲家包都是最新的.

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

另一个更新

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

Lau*_*nce 6

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

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

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

我建议您将您的信息提供给该机票,并留意那里以获取更多信息.