在 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() $tokenSession::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/thumbshttp://www.spottunes.net/thumbs/ 的循环重定向,然后再从那里回到 http://www.spottunes.net/thumbs 等等……与问题无关,但仍然是你应该调查和修复的东西。