【发布时间】:2015-01-23 21:22:47
【问题描述】:
我在 Laravel 4 中创建了应用程序。在 localhost 上一切正常,但是当我将应用程序上传到公共服务器时,我总是得到 TokenMissMatchException。经过一些调试后,我注意到每个 POST 请求都会创建两个令牌。
这是filter.php
Route::filter('csrf', function() {
$token = Request::ajax() ? Request::header('x-csrf-token') : Input::get('_token');
if (Session::token() != $token){
throw new Illuminate\Session\TokenMismatchException;
}
});
当我 var_dump() $token 和 Session::token() 我得到两个不同的值。
发布请求不是 ajax。
有人可以帮我解决这个问题吗?
编辑
当我删除CSRF保护时我可以登录,但是当我刷新页面时我退出了,所以它一定是会话有问题,因为它很快就失效了
【问题讨论】:
-
“经过一些调试,我注意到每个 POST 请求都会创建两个令牌” – 这是在哪里/如何发生的?
-
@CBroe 当我在 Firebug 中打开某个表单时,我可以看到 _token 值,然后如果我提交该表单,$token 包含该 _token 值,但 Session::token 包含不同的令牌。
-
但是会话保持不变(所有请求的会话 ID 相同)?通过浏览器的开发人员工具中的网络面板,在加载了带有表单的页面后,去检查是否有任何意外的额外请求发生。
-
@CBroe 不,没有其他请求,我只收到 1 个 POST 请求
-
我的意思是 before POST 请求,即(可能)GET 请求,它加载带有表单的 HTML 页面。 // 既然你说你在公共服务器上遇到这个问题,你能告诉我们地址吗,我们自己看看?
标签: php laravel laravel-4 token