Session Laravel会话密钥始终在更改?

Session Laravel会话密钥始终在更改?,session,laravel-4,Session,Laravel 4,我正在使用“文件存储”进行会话。当我运行此命令时: Session::set('awesomekey', 'myVal123'); 然后刷新页面,每次我都可以看到在/storage/session中创建的新文件。我假设它每次都会更新同一个文件。这基本上意味着会话根本不起作用。换句话说,如果它一直在重新创建会话文件,则此操作永远不会起作用: Session::get('awesomekey'); 或者至少,它返回一个空白。我遗漏了什么可能导致每次加载页面时创建新会话密钥 更新 在进一步的调查中

我正在使用“文件存储”进行会话。当我运行此命令时:

Session::set('awesomekey', 'myVal123');
然后刷新页面,每次我都可以看到在/storage/session中创建的新文件。我假设它每次都会更新同一个文件。这基本上意味着会话根本不起作用。换句话说,如果它一直在重新创建会话文件,则此操作永远不会起作用:

Session::get('awesomekey');
或者至少,它返回一个空白。我遗漏了什么可能导致每次加载页面时创建新会话密钥

更新

在进一步的调查中,cookie似乎是在每次页面加载时重新生成的。是什么原因造成的

我甚至还没有登录,所以这些信息对我来说是无用的-->

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

有人知道为什么会这样吗

更新2

  • 在session.php中添加:“lifetime”=>120无效。(@Sheikh Heera)
  • 仅将代码放置在控制器中不起作用。(@Phill Sparks)
  • 我尝试了chrome和firefox,结果是一样的(@Shift-Exchange)
  • 只是想弄清楚我想做什么。我在HomeController.php中添加了以下代码:

    public function index()
    {
        Session::put('awesomekey', 'myVal123');
        return View::make('home.index');
    }
    
    然后我把它放在master.blade.php中:

    print Session::get('awesomekey');
    
    我不包括任何“死亡”或随机回声在我的控制器端的代码,除了这个。当我第一次打开文件时,我可以看到myVal123正在打印出来

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

    Session::put('awesomekey', 'myVal123');
    
    $d = Config::get('session.lifetime');
    print $d;
    
    然后重新加载页面。现在它什么也不打印。我可以在浏览器中看到cookie已更改。生成一个新cookie将丢失对会话的引用,因此我一直试图理解为什么每次都这样做,即使它在第一次加载时保存了会话

    还有什么想法吗

    更新3

    我还尝试:

  • 正在运行“php artisan转储自动加载”。。。还是不行
  • 我来到这里:。。。是的,cookies已启用
  • 我真的没什么主意了

    更新4

  • 我访问了SessionManager.php,就在下面:

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

  • 我打印出了生命时间的价值:

    print $lifetime; die();
    
    这个代码在重新加载页面时从未被命中?!但是,在我的控制器中添加以下内容:

    Session::put('awesomekey', 'myVal123');
    
    $d = Config::get('session.lifetime');
    print $d;
    
    实际上是否打印出我的终身价值…:(

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


    我相信您正在使用:

    'lifetime' => 0 // number of minutes
    
    在您的
    app/config/session.php文件中。将其设置为:

    'lifetime' => 120 // number of minutes or whatever you want
    
    它会工作的。我尝试了与您描述的相同的设置,只是使用了
    0
    ,我得到了相同的结果,每次创建一个新文件,但一旦我将其更改为
    120
    左右,它就会工作。因此,如果在会话配置中将其设置为
    'life'=>0
    ,那么每次它都会为新的SES创建一个新文件,这是有意义的因为会话不活动,所以请转到您的
    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.
    |
    */
    
    更新: 您可以使用以下代码获取
    app/config/session.php
    文件中设置的
    life
    值:

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

    在Chrome developer tools或Firebug中查看cookie的过期时间。如果将其设置为0,则cookie将立即过期


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

    问题出在这一行:

    'cookie' => 'xxxx.com',
    

    显然,如果你有一个“.”,它会丢失cookie在cookie名称中。我不敢相信Laravel不喜欢这样。或者可能是浏览器的一般情况。

    我在会话中遇到了类似的问题,如果您使用的是model User,并且您的users表没有primaryKey作为Id,则必须在model中覆盖该变量

    class User extends Eloquent {
    
         protected $primaryKey = 'admin_id';
    
    }
    

    在/app/config/session.php中检查“仅HTTPS Cookie”设置


    如果不使用SSL,请确保其为“secure=>false!”

    我遇到过与此相关的问题。并非每次都创建会话文件,但有时我就是无法显示会话变量。经过数小时的实验,我发现问题与此有关


    如果您使用的是Debugbar并且存在会话问题,请禁用它,然后重试确认。

    尝试使用会话闪存,它将仅适用于下一个请求,除非您重新刷新它。您可以详细说明一下吗?我的问题是我的cookie正在重新生成,我需要了解原因。您可以发布更多相关代码吗?您是否尝试存储som从您的控制器而不是从您的视图在会话中进行设置?您解决了吗?我有相同的问题。在本地运行良好,但在服务器上运行不正常。请提供建议。感谢您显示差异,但这没有什么不同这不是问题,
    session::put()
    使用
    session::set()
    我现在无法确认,因为发生这种情况的设置是在另一台笔记本电脑上,但我99.999%确定我确实设置了这个值。还有什么可以这样做呢?在我按照您在
    0
    lifetime中描述的方式进行设置之后,我也发生了这种情况。最好的是:-)交叉手指这就是问题所在。今晚见,这不行。我将我的“一生”设置为“一生”=>1440这不起作用。我正在用更多信息更新机票。同时看看这是否是一个问题:这确实有帮助。每次我加载页面时,它都会说cookie的过期时间是现在。所以,我的“lifetime”变量不知何故被重写了。我还将检查我所有的提交,看看是否在任何代码之间都没有留下随机的“回音”或“打印”。搜索仍在继续…这是同一个问题吗