在 post 请求期间更改了会话
Session is changed during post request
我在 Laravel 4 中创建了应用程序。在本地主机上一切正常,但是当我将应用程序上传到 public 服务器时,我总是得到 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()
我得到两个不同的值。
Post 请求不是 ajax。
有人可以帮我解决这个问题吗?
编辑
当我取消 CSRF 保护时,我可以登录,但是当我刷新页面时,我会被注销,所以肯定是会话有问题,因为它很快就失效了
正如我所怀疑的那样,有 两个请求,而应该只有一个……
在第 285 行,您有
<img src="http://www.spottunes.net/" id="imgWrap" …>
– 这使得浏览器请求与再次加载文档相同的 URL。它当然拒绝显示为图像,因为它再次提供相同的 HTML 文档——但我假设请求 HTML 文档本身是触发生成表单标记的原因,这就是你的问题那里:请求原始 HTML 文档并为您的表单生成令牌后,再次请求相同的 URL ,因此 生成了新的 表单标记——当您提交表单时,标记不再匹配。
所以删除那个 img
元素(或者给它一个实际图像的 URL 作为 src
),问题应该解决了。
顺便说一句。你还有一个从 http://www.spottunes.net/thumbs
到 http://www.spottunes.net/thumbs/
的循环重定向,然后再从那里回到 http://www.spottunes.net/thumbs
等等……与问题无关,但仍然是你应该调查和修复的东西。
我在 Laravel 4 中创建了应用程序。在本地主机上一切正常,但是当我将应用程序上传到 public 服务器时,我总是得到 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()
我得到两个不同的值。
Post 请求不是 ajax。
有人可以帮我解决这个问题吗?
编辑
当我取消 CSRF 保护时,我可以登录,但是当我刷新页面时,我会被注销,所以肯定是会话有问题,因为它很快就失效了
正如我所怀疑的那样,有 两个请求,而应该只有一个……
在第 285 行,您有
<img src="http://www.spottunes.net/" id="imgWrap" …>
– 这使得浏览器请求与再次加载文档相同的 URL。它当然拒绝显示为图像,因为它再次提供相同的 HTML 文档——但我假设请求 HTML 文档本身是触发生成表单标记的原因,这就是你的问题那里:请求原始 HTML 文档并为您的表单生成令牌后,再次请求相同的 URL ,因此 生成了新的 表单标记——当您提交表单时,标记不再匹配。
所以删除那个 img
元素(或者给它一个实际图像的 URL 作为 src
),问题应该解决了。
顺便说一句。你还有一个从 http://www.spottunes.net/thumbs
到 http://www.spottunes.net/thumbs/
的循环重定向,然后再从那里回到 http://www.spottunes.net/thumbs
等等……与问题无关,但仍然是你应该调查和修复的东西。