PHP会话提前到期
我在运行的
PHP站点出现问题,几分钟后用户正在注销(确切的时间因人而异,但频繁出现问题),无论他们是否积极使用该站点或不.
困难在于我无法重现这个问题,如果我使用相同的浏览器以相同的用户身份登录我不会被注销,这表明这不是网站完全被破坏的情况.不幸的是,我无法访问用户计算机来运行任何流量嗅探软件. 我已经检查的东西是: >要求用户尝试不同的浏览器.这似乎并没有解决问题,也不是一个长期的解决方案,因为我无法决定客户将使用哪些浏览器. PHP中的会话设置是Debian默认值,并且未在.htaccess文件或其他任何位置更改.主要是: session.cookie_lifetime 0 session.gc_divisor 100 session.gc_maxlifetime 1440 session.gc_probability 0 session.save_handler files session.save_path /var/lib/php5 session.use_cookies On Debian通过cron作业删除会话,而不是使用PHP的垃圾收集器,这就是为什么gc_probability被设置为0.我们运行的PHP版本是:PHP 5.2.6-1 lenny13与Suhosin-Patch 0.9.6.2(cli)( Lenny的最新版本,我们很快就会升级到Squeeze,但我不认为这是问题的原因). 我们使用Zend_Session来管理会话,并在每个页面上创建一次Zend_Session_Namespace实例,从而自动调用session_start().通过在注销页面上调用Zend_Session :: destroy()来清除会话,因此用户应该注销的唯一方法是: >如果他们明确地单击了注销链接(我们会在发生这种情况时进行记录,并且似乎不会出现浏览预先获取页面并因此将用户注销的情况). 查看用户是否已登录的检查是: >他们有一个有效的会话(通过查看我们是否可以访问$zsession-> user_id进行检查). 任何人都可以提出我可以尝试的其他事情 编辑:我根据评论留下的一些额外的事情: >设置session.cookie_domain:这似乎在PHP中有非常奇怪的行为.如果我没有设置此变量并将其保留为默认值”(空字符串),则对www.domain.com的请求将生成www.domain.com的cookie.但是,如果我将cookie_domain设置为“www.domain.com”,则cookie的域名为“.www.domain.com”(注意引导点,这意味着对www.domain.com以下的所有内容都有效,例如subsite.www .domain.com). 编辑2:基于人们提出的其他问题: >该站点托管在数据中心的单独VLAN中.访问该站点的任何人都不在该站点的同一网络上.
这很奇怪 – 在cron工作中运行的代码是什么?
我建议你在会话过期/删除后2天保留这个(但是在你当前删除它时将其标记为死).此外,开始在Web服务器日志中记录会话ID. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |