Laravel 4.1会话变量被随机遗忘

时间:2014-05-05 22:20:09

标签: session laravel-4 session-variables

我正在使用Apache上的Laravel 4.1应用程序,一切都在我的本地开发计算机上正常工作,但在我的登台计算机(在共享主机上)上,用户随机退出并提示输入他们的凭据试。

相关设置:

应用程序/配置/ session.php文件:

<?php
return array(
    'driver' => 'file',
    'lifetime' => 120,
    'expire_on_close' => true,
    'files' => storage_path().'/sessions',
    'connection' => null,
    'table' => 'sessions',
    'lottery' => array(2, 100),
    'cookie' => 'laravel_session',
    'path' => '/',
    'domain' => null,
    'secure' => false,
);
  • 使用Laravel的默认身份验证驱动程序
  • 的php.ini:
    • gc_maxlifetime = 1440
    • gc_probability = 1
    • gc_divisor = 100

这似乎与其他人遇到的问题here不同。会话文件没有被php清除。只有少数会话变量被随机丢弃。

tail -F了解会话文件,可以看到变量何时在一个请求和下一个请求之间被删除。它之前看起来像这样(格式化为更容易阅读):

a:4:{
    s:5:"flash";a:2:{s:3:"old";a:0:{}s:3:"new";a:0:{}}
    s:6:"_token";s:40:"hvuw9VWWjssSwUL2C5eVSn0qZ2g1cwVF5YCEsLG7";
    s:38:"login_82e5d2c56bdd0811318f0cf078b78bfc";i:2;
    s:9:"_sf2_meta";a:3:{s:1:"u";i:1399318721;s:1:"c";i:1399318011;s:1:"l";s:1:"0";}}

之后:

a:3:{
    s:6:"_token";s:40:"7o3b6NhiuDKXq4ftvngUefqe6cWybX1tzPEcDaxk";
    s:9:"_sf2_meta";a:3:{s:1:"u";i:1399318721;s:1:"c";i:1399318721;s:1:"l";s:1:"0";}
    s:5:"flash";a:2:{s:3:"old";a:0:{}s:3:"new";a:0:{}}}

login_会话消失了,这导致Laravel的Session类假设用户未经过身份验证。不过,我不确定为什么会话变量会被丢弃。据我所知,在登录会话变量中调用Session :: forget,:: clear(),:: remove()或:: invalidate()都没有。

我还注意到_token变量在请求之间是不变的,直到问题出现时它发生变化,如上所示。

知道这里发生了什么吗?

1 个答案:

答案 0 :(得分:0)

切换到数据库会话管理器似乎解决了这个问题。我怀疑在我的主机服务器配置上有一些方法,php正在消除会话文件。