2014-05-05 109 views
2

我在Apache上使用Laravel 4.1应用程序,并且在我的本地开发机器上一切正常,但在我的登台机器上(共享主机上)用户随机获取日志并提示再次输入他们的凭证。Laravel 4.1会话变量被随机忘记

相关设置:

应用程序/配置/ session.php文件:使用Laravel默认的认证驱动程序

​​
  • 的php.ini:
    • gc_maxlifetime = 1440
    • gc_probability = 1
    • gc_divisor = 100

这似乎并不相同的问题,一些人都经历过here。会话文件没有被php清除。只有几个会话变量随机丢弃。

I tail -F'd会话文件,并且可以看到变量在一个请求和下一个请求之间何时被丢弃。

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变量在请求之间是不变的,直到问题出现在哪个点发生变化时为止,如上所述。

任何想法这里发生了什么?

+0

你可以请发布你的完整会话配置吗?另外 - 你可以尝试一个替代会议驱动器?也许数据库暂时看看问题是否存在? – Laurence

+0

好吧,我已经发布了我的session.php上面 – ralbatross

+0

虽然不完全是一个问题 - 改变你的cookie名称为'东西' - 不要使用下划线 - 它可能会导致一个问题。另外 - 尝试关闭expire_on_close,看看是否有帮助。 http://stackoverflow.com/q/15016204/1317935 – Laurence

回答

0

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