这个问题刚刚开始发生今天上午,我不知道是什么改变导致它。我在我的网站的顶级导航栏中实施了一个小型搜索表单,截至上周它工作得很好。今天早上,它为每个提交返回“TokenMismatchException”。Laravel Form :: open()给出过期的_token?
通过我的调试器,我可以在csrf过滤器中看到的确,Input::get('_token')
的值与Session::token()
的值不同。我还可以查看生成的表单HTML源,并比较自动生成的隐藏字段的值,并查看它与会话存储中的令牌不同(使用4.2的本机文件存储,以便这些文件在我的IDE中正确) )。
看起来,无论出于何种原因,生成的_token
的值始终等于上一次会话中的令牌值。换句话说,Form::open()
给我一个令牌,在一个会话前过期。或正在创建新会话Form::open()
输出令牌。
我一直盯着这个坚实的2.5小时,无法理解可能导致它的原因。有任何想法吗?
编辑:添加代码 -
观点:
{{ Form::open(['route' => 'search.customer_job', 'id' => 'customer-job-search-form']) }}
... // a single select field
{{ Form::close() }}
路线:
Route::post('search/customerJobCombined', ['before' => ['csrf', 'auth'], 'as' => 'search.customer_job', 'uses' => '[email protected]']);
它从来没有真正达到控制器,所以我会离开了这一点,以避免墙壁-O-文本。只有一个变量传递给视图 - 它填充选择选项 - 这是通过View Composer的完成 - 这里要说的是:
public function compose($view)
{
$result = $this->command_bus->execute(new GenerateCustomerJobQuickSearchOptionsCommand());
$view->with('customer_job_quick_search_options', $result->options);
}
所有这一切都工作得很好,虽然。
编辑#2: 这是一个非常愚蠢的错误,涉及一些调试代码(Session::flush()
),我加了几天前,在度假时忘了。
你在什么类型的服务器?你是否尝试更改会话驱动程序? – itachi 2015-03-13 17:34:53
这一切都发生在Homestead目前,所以Ubuntu 14.04/GNU/Linux。我没有更改会话驱动程序,但我最近更新了我的流浪者箱子。我会尝试更换驱动程序,看看是否有帮助...理想情况下,我不需要为此更改驱动程序。 – patricksayshi 2015-03-13 18:00:13
更改会话驱动程序(redis)没有帮助 – patricksayshi 2015-03-13 18:02:12