会话在发布请求期间更改

时间:2015-01-23 21:22:48

标签: php laravel laravel-4 token

我在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() $tokenSession::token()时,我会得到两个不同的值。 发布请求不是ajax。 有人可以帮我这个吗?

修改

当我删除CSRF保护时,我可以登录,但是当我刷新页面时,我会被注销,因此会话一定有问题,因为它会很快失效

1 个答案:

答案 0 :(得分:1)

正如我所怀疑的那样,两个请求,其中应该只有一个......

在第285行,你有

<img src="http://www.spottunes.net/" id="imgWrap" …>

- 这使得浏览器请求与再次加载文档的URL相同。它当然拒绝显示为图像,因为它再次提供相同的HTML文档 - 但我认为请求HTML文档本身就是触发表单令牌生成的原因,那就是你的问题:原始HTML文档之后是请求并生成表单的令牌,再次请求相同的网址,因此生成新的表单令牌 - 当您提交表单时,令牌“ t匹配了。

请删除img元素(或将实际图片的网址设为src),然后解决问题。


顺便说一下。您还有一个从http://www.spottunes.net/thumbshttp://www.spottunes.net/thumbs/的循环重定向,再从那里返回到http://www.spottunes.net/thumbs,依此类推......与问题无关,但您应该查看并修复。< / p>