Kohana 3.2会话过期,短期到期工作按预期进行

时间:2012-05-25 04:59:33

标签: php session kohana kohana-3.2

Kohana 3.2会议即将到期。我目前的配置是:

return array(
'native' => array(
    'name' => 'kohanasession',
    'lifetime' => 0,       
 ),
);

使用lifetime => 0表示会话将在浏览器关闭时结束。但是,1小时后会话到期。

我也尝试使用不同的生命周期(例如36000 => 10小时),但同样失败了。

如果我使用微小的会话寿命(例如10秒),则到期时效果很好。据我检查,似乎如果我希望一个会话的生命周期超过1小时,它将无法工作。

最后,我们用于php.ini的相关配置

session.save_handler = memcache
session.save_path="tcp://127.0.0.1:11211?persistent=1&weight=1&timeout=1&retry_interval=15"
session.cache_limiter = nocache
session.gc_probability = 0

我真的迷失在这里。这应该很容易修复,但我无法解决。

1 个答案:

答案 0 :(得分:5)

lifetime => 0参数可能只影响会话cookie的生命周期。

可能发生的事情是,虽然cookie工作正常,但您在服务器端丢弃了用户的会话数据。 PHP有会话垃圾收集,默认情况下有点奇怪:它在24分钟空闲时间后将会话标记为已过期,并且每次请求清除所有过期会话的可能性为1%。

您可以增加PHP ini设置session.gc_maxlifetime,或者可以将session.gc_probability设置为零以完全禁用自动会话垃圾回收。

当然,也有可能将memcached服务器配置为在一段时间后丢弃数据。

更新:对于平均会话处理程序,将session.gc_probability设置为零将是完全禁用自动清理的方法。但是,memcache会话处理程序实际上已经不执行垃圾收集(它的gc回调什么都不做)。因此,更改session.gc_probabilitysession.gc_divisor中的任何一个对于该保存处理程序都是没有意义的。

相反,memcache保存处理程序会在将会话数据保存到memcached服务器时自动设置到期时间(expire param到Memcache::set)。处理程序从session.gc_maxlifetime设置中读取要使用的到期时间。所以,那是唯一一个在你使用memcache会话保存处理程序时真正重要的GC设置。