Laravel会话密钥改变了整个时间?

时间:2014-03-01 08:13:54

标签: session laravel-4

我正在为我的会话使用“文件存储”。当我运行时:

Session::set('awesomekey', 'myVal123');

刷新页面,我可以看到每次在/ storage / session中创建新文件。我以为它每次都会更新同一个文件。这基本上意味着会话根本不起作用。换句话说,如果它不断重新创建会话文件,这永远不会起作用:

Session::get('awesomekey');

或者至少,它返回一个空白。我错过了什么可能导致每次加载页面时都会创建一个新的会话密钥?

更新

在进一步调查中,似乎在每次页面加载时都会重新生成cookie。可能导致什么?

我还没有看到登录,所以这些信息对我来说毫无用处 - > http://willworkforbanjos.com/2014/02/laravel-sessions-not-working-in-4-1/

当我简单地将上面的set和get代码放在master.blade.php文件中时,我的问题就出现了。它应该设置它,存储信息,并在下次重新加载时从会话中获取正确的信息。但它不能,因为在重新加载时它将cookie更改为其他一些代码。

任何人都知道为什么会这样吗?

更新2

  1. 添加:'life'=> 120到session.php不起作用。 (@Sheikh Heera)
  2. 仅将代码放在控制器中,不起作用。 (@Phill Sparks)
  3. 我试过chrome和firefox,结果相同(@The Shift Exchange)
  4. 要清楚我要做的事情。我在HomeController.php中添加以下代码:

    public function index()
    {
        Session::put('awesomekey', 'myVal123');
        return View::make('home.index');
    }
    

    然后我把它放在我的master.blade.php中:

    print Session::get('awesomekey');
    

    除了这个,我在代码的控制器端不包含任何“die”或随机回声。当我第一次打开文件时,我可以看到myVal123被打印出来。

    然后我在控制器中取出这部分:

    Session::put('awesomekey', 'myVal123');
    

    然后重新加载页面。它现在什么都不打印。我可以在浏览器中看到cookie已更改。生成一个新的cookie将失去对会话的引用,所以我不知道每次都在理解它为什么这样做,即使它在第一次加载时保存会话。

    还有什么想法?

    更新3

    我也尝试过:

    1. 运行“php artisan dump-autoload”...仍然无法正常工作
    2. 我去了这里:http://www.whatismybrowser.com/are-cookies-enabled ...是的,已启用Cookie。
    3. 我在这里真的没有想法......

      更新4

      1. 我去了SessionManager.php,就在下面:

        $ lifetime = $ this-> app ['config'] ['session.lifetime'];

      2. 我打印出了终身价值:

        print $lifetime; die();
        

        此代码从未在页面重新加载时被点击?!但是,在我的控制器中添加它:

        $d = Config::get('session.lifetime');
        print $d;
        

        事实上是否会终身打印出我的价值.... :(

6 个答案:

答案 0 :(得分:4)

问题在于这一行:

'cookie' => 'xxxx.com',
在session.php中

。如果你有“。”,它显然会丢失cookie。在cookie名称中。我无法相信Laravel不喜欢那样。或者也许它是浏览器的一般。

答案 1 :(得分:1)

我相信你正在使用:

'lifetime' => 0 // number of minutes

app/config/session.php文件中。做到这样:

'lifetime' => 120 // number of minutes or whatever you want

它会起作用。我尝试了与您描述的相同的设置并且只使用了0并且我得到了相同的结果,每次创建新文件但是一旦我将其更改为120左右,它就可以工作。因此,有意义的是,如果它在会话配置中设置为'lifetime' => 0,则每次只为新会话创建新文件,因为会话不存在。所以,转到你的app/config/session.php文件,你会发现这样的事情,改变价值:

/*
|--------------------------------------------------------------------------
| Session Lifetime
|--------------------------------------------------------------------------
|
| Here you may specify the number of minutes that you wish the session
| to be allowed to remain idle before it expires. If you want them
| to immediately expire on the browser closing, set that option.
|
*/

更新

您可以使用以下代码获取lifetime文件中设置的app/config/session.php值:

Config::get('session.lifetime');

答案 2 :(得分:1)

在Chrome开发者工具或Firebug中查看Cookie的过期时间。如果设置为0,那么cookie将立即过期。

另外,请仔细检查您的时钟是否设置正确 - 如果您的主机与浏览器的时钟之间存在差异,则可能会发生奇怪的事情。让两个系统都咨询NTP以确保这不是问题。

答案 3 :(得分:1)

我遇到类似的会话问题,如果你使用的是模型用户,而你的用户表没有将primaryKey作为Id,你必须在模型中覆盖该变量。

class User extends Eloquent {

     protected $primaryKey = 'admin_id';

}

答案 4 :(得分:1)

在/app/config/session.php中,选中“仅HTTPS Cookie”设置。

如果您不使用SSL,请确保它是“secure => false”!

答案 5 :(得分:0)

使用Session :: put('value')而不是set。

http://laravel.com/docs/session#session-usage