Laravel Form::open() 给出过期的_token


Laravel Form::open() giving expired _token?

这个问题今天早上才开始发生,我不知道是什么变化导致了它。我已经在网站的顶部导航中实现了一个小的搜索表单,截至上周它工作正常。今天早上,它为每个提交返回"TokenMismatchException"。

通过我的调试器,我可以在csrf过滤器中看到Input::get('_token')的值确实与Session::token()的值不同。我还可以查看表单生成的 HTML 源代码,并比较自动生成的隐藏_token字段的值,并看到它与会话存储中的令牌不同(使用 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' => 'SearchController@customerJobSearch']);

从未真正到达控制器,因此我将省略它以避免墙文本。只有一个变量被传递给视图 - 它填充选择选项 - 这是通过视图编辑器完成的 - 这里是:

public function compose($view)
{
    $result = $this->command_bus->execute(new GenerateCustomerJobQuickSearchOptionsCommand());
    $view->with('customer_job_quick_search_options', $result->options);
}

不过,所有这些都工作得很好。

编辑#2:这是一个非常愚蠢的错误,涉及我几天前添加的一些调试代码(Session::flush()),并在度假时忘记了。

这是一个涉及旧调试代码的错误。