我在这里不知所措。我在楼上有一组特定的用户,他们的 session 似乎完全随机地过期。不仅仅是当他们离开网站一段时间时,它可能会在他们四处浏览时过期。对于我和我们的大多数用户来说,一切都很好。这不是浏览器问题,我们有人在 FF 和所有 IE 版本中都可以正常运行,也有人在 FF 和 IE 中不能正常工作。
我的 gc_maxlifetime
是 43200
并且垃圾收集是一个疯狂的低 1/1000
(这无关紧要)。是否有可能服务器上运行的其他东西随机删除了我们的一些 session ?我应该检查什么?这仍然无法解释为什么只有这个特定的群体似乎受到影响。
我有一些与默认设置不同的 session 设置:
session.gc_maxlifetime = 43200
session.gc_divisor = 1000
session.save_path = /var/lib/php/session
session.use_only_cookies = Off
session.bug_compat_42 = Off
前三个我并不担心,但后两个是否会导致此行为?我实际上从来没有通过 URL 发送 cookie,所以我没有充分的理由关闭 use_only_cookies。我无法保证在我来到这里之前制作此应用程序的不当行为没有利用 bug_compat_42
来设置 session 变量,但同样,我希望问题不会那么随机。
编辑:
在进一步调查中,我发现 Session 根本没有被销毁,但最终用户正在获得一个新的 session ID。旧 session 仍然完整地存在于服务器上,但在他们浏览时会随机启动一个新 session 。
最佳答案
这里的问题原来是他们的浏览器将 session cookie 设置为过早过期。我已经用这个肮脏、肮脏的 hack 解决了这个问题,你永远都不应该使用它。我并不为此感到自豪,但如果这对任何事情有所启发,请随时让我参与:
if (!headers_sent()) {
if ($_COOKIE["PHPSESSID"] != "") {
setcookie("PHPSESSID", $_COOKIE["PHPSESSID"], time()+43200, "/", ".mydomain.com");
}
}
关于PHP session 意外过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/916542/