2015-03-13 47 views
0

这个问题刚刚开始发生今天上午,我不知道是什么改变导致它。我在我的网站的顶级导航栏中实施了一个小型搜索表单,截至上周它工作得很好。今天早上,它为每个提交返回“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()),我加了几天前,在度假时忘了。

+0

你在什么类型的服务器?你是否尝试更改会话驱动程序? – itachi 2015-03-13 17:34:53

+0

这一切都发生在Homestead目前,所以Ubuntu 14.04/GNU/Linux。我没有更改会话驱动程序,但我最近更新了我的流浪者箱子。我会尝试更换驱动程序,看看是否有帮助...理想情况下,我不需要为此更改驱动程序。 – patricksayshi 2015-03-13 18:00:13

+0

更改会话驱动程序(redis)没有帮助 – patricksayshi 2015-03-13 18:02:12

回答