PHP会话用户正在注销

时间:2010-11-03 15:31:16

标签: php session

我在使用PHP网站时遇到问题,该网站要求用户登录以访问除主页和几个静态页面之外的所有内容(关于我们,联系我们等)。一些用户表示他们在使用网站时每隔几分钟就会被注销 - 他们可以登录但几分钟后会再次显示登录表单。我自己无法确认这一点,因为该网站似乎对我来说工作正常 - 即使使用相同的浏览器并在他们的帐户下 - 但我想知道这可能是会话设置的问题吗?

根据phpinfo(),会话配置值为:

session.auto_start = Off
session.bug_compat_42 = On
session.bug_compat_warn = On
session.cache_expire = 180
session.cache_limiter = nocache
session.cookie_domain = no value
session.cookie_httponly = Off
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_secure = Off
session.entropy_file = no value
session.entropy_length = 0
session.gc_divisor = 100
session.gc_maxlifetime = 1440
session.gc_probability = 1
session.hash_bits_per_character = 4
session.hash_function = 0
session.name = PHPSESSID
session.referer_check = no value
session.save_handler = files
session.save_path = /shared/sessions
session.serialize_handler = php
session.use_cookies = On
session.use_only_cookies = Off
session.use_trans_sid = 0

以上设置是否有明显错误导致用户定期注销? session.gc_maxlifetime看起来有点低,但1440秒仍然是24分钟,用户正在更频繁地退出。尽管办公室仍然有静态IP地址,但我们不会将用户的IP作为会话处理的一部分进行检查。

这是在Debian Lenny服务器上,PHP 5.2.6和Apache 2.2.9。

3 个答案:

答案 0 :(得分:2)

将session.gc_maxlifetime设置为3600似乎(在监视一两周后)修复了问题。我仍然不确定这是真正的原因,因为用户在2-3分钟后退出,但是对于遇到类似问题的人来说值得尝试。

记录每个登录/注销函数调用,以便您可以将它们配对并发现任何不匹配(例如,来自一个用户的大量登录而没有任何注销调用)也非常有用。 :)

答案 1 :(得分:0)

似乎一切正常 - 会话应在1440秒后过期。是否有可能在用户访问的其中一个页面上调用session_destroy()?或者可能会更改$_SESSION数组并因此而记录用户?

另外,你自己重现了这个问题吗?用户通常习惯于把事情做大。对他们来说,似乎经常24分钟:)

答案 2 :(得分:0)

您是否在该网站上使用任何AJAX调用?

如果是这样,已知AJAX调用不会更新会话cookie(至少根据我对CodeIgniter框架的经验,它也使用cookie来创建和传输会话),因此人们即使不应该注销也会注销。

它可能也是浏览器中的一些设置 - 手动cookie过期时间,插件或类似的东西。