Laravel会话在每次加载时重新生成

时间:2014-01-12 16:08:20

标签: php session cookies laravel-4

我遇到了很多问题,而且我似乎无法找到解决方案。

昨天,我在Laravel的一个流浪盒上完成了一些工作。当我关闭计算机时,登录功能正常。

今天打开所有内容我发现会话不再有效。

我已经尝试了所有我能想到的但是我现在无法登录并且闪存数据不起作用。

每个页面都会加载一个新会话 - 例如使用本机驱动程序,如果我登录,它会创建两个会话 - 一个用于登录页面,一个用于发布的登录页面。

如果我使用数据库驱动程序,我会得到相同的结果。每次我点击登录,我都会得到另外两行会话数据

我无法分辨cookie驱动程序发生了什么,但我已经尝试过它并且无法正常工作。

我在Chrome和IE中尝试过,但都不会登录。我已经尝试多次删除存储文件夹的内容,并在浏览器端清空cookie。我确实认为这可能与vm和本地机器上的时间不同有关,但它们是同步的。

任何可能导致这种情况的想法?有人在此之前遇到过这个问题吗?

编辑:我现在还重新创建了虚拟机,问题仍然存在

第二次编辑:我现在已经从头开始使用具有相同结果的digitalocean VPS。

我已经删除了我的路线文件中的所有内容,现在所有内容都是以下内容

<?php

Route::get('/sess/set/{value}', function($value) {
    Session::set('testv', $value);
Return 'Set ' . $value . ' - ' . Session::get('testv');
});

Route::get('/sess/get', function() {
    Return 'Get ' . Session::get('testv');
});

我访问了第一页,它显示了我在会话中输入的任何价值。点击第二页,您只能获得没有任何会话值的“获取”部分。

session_attributes总是有一个_token字段,我尝试更改会话和域的名称,仍然无法使会话正常工作。

edit3:对于遇到这种情况的人,我从未发现过这个问题。我开始了一个全新的项目,复制了我的控制器和视图,重新创建了我的路径文件,现在一切正常 - 虽然我有一半希望明天更新这篇文章再说它再次被打破了!

7 个答案:

答案 0 :(得分:8)

我的问题是我的函数中有echo语句。它使会话无法正确创建/存储。

在我的'返回重定向'之前我有一个回声,所以重定向没有得到会话......

public function login()
{
    // auth
    if (Auth::attempt(Input::only('email', 'password'), true))
    {
        return Redirect::route('companies.index');
    }
    // failed -> back to login
    return Redirect::back()->withErrors(['email' => 'Login failed.'])->withInput();
}

详细信息:http://brainwashinc.com/2014/02/17/laravel-sessions-not-working-in-4-1/

答案 1 :(得分:2)

我遇到了这个确切的问题,而且环境几乎相同。正如你所经历的那样,最终为我工作的是开始一个完全新鲜的Laravel 4.1项目然后复制一切。但是我也发现通过更改一个配置变量我能够解决问题:

在/app/config/session.php中将lifetime配置项更改为高于0的值。这为我解决了这个问题。

答案 2 :(得分:2)

我遇到了同样的问题,并且已经将会话值更改为4,1版本。我完成所有工作正常后,登录到我们的服务器并运行了composer update命令。

composer update

答案 3 :(得分:2)

我花了整整一天时间遇到同样的问题(会话几乎每次请求都重新生成),并且在网上找不到任何有用的东西。如果有人有同样的问题,请在此处发布。

基本上问题是由于模板错误,会话cookie未正确设置。因此,如果您遇到此问题,请首先通过http标头检查会话cookie是否已通过每个请求设置

在我的情况下,我错误地在我的一些模板中使用了类似的东西:

@section('test')
<p>Some content here</p>
@endsection

这是错误的!

在Laravel 4中,它必须是 @stop而不是@endsection

@section('test')
<p>Some content here</p>
@stop

使用@endsection使应用程序无法正确完成,因此未设置任何会话cookie。但是,日志文件中没有任何错误的痕迹。顺便说一句,这种错误也会导致后期过滤器无法应用。

答案 4 :(得分:1)

我也有这个问题,结果是早期输出数据 - 我已经回应了控制器动作中的一些调试文本,然后尝试第一次设置会话变量 - 会话就是这样坚持不懈,并且每次都重新创建 - 一旦我删除了输出,它就可以正常工作(从那时起就很好)

答案 5 :(得分:1)

我从Laravel 5.1升级到5.2,并且在每次页面加载时都会产生大量会话的问题。使用哪个会话驱动程序并不重要,在配置中更改任何内容也不起作用。 (我尝试了Google生成的每个StackOverflow结果的每个建议。)

我的解决方案:删除&#34;网络&#34;路线中的中间件。显然,Web中间件自动包含在5.2+中,因此,如果您的路由也指定了它,那么最终会生成多个会话。

答案 6 :(得分:0)

这可能发生的原因很多,我自己也遇到了这个问题。对我的修复是改变:

public function getAuthIdentifier()
{
    return $this->username;
}

public function getAuthIdentifier()
{
    return $this->getKey();
}

User模型上。