PHP session 意外过期

标签 php session

我在这里不知所措。我在楼上有一组特定的用户,他们的 session 似乎完全随机地过期。不仅仅是当他们离开网站一段时间时,它可能会在他们四处浏览时过期。对于我和我们的大多数用户来说,一切都很好。这不是浏览器问题,我们有人在 FF 和所有 IE 版本中都可以正常运行,也有人在 FF 和 IE 中不能正常工作。

我的 gc_maxlifetime43200 并且垃圾收集是一个疯狂的低 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/

相关文章:

php - 获取所选下拉列表的值以与另一个下拉列表进行比较

php - 如何获取该月某一天的下一次出现情况

php - Composer 要求 phpoffice/phpspreadsheet 不起作用

PHP - 如果可用,如何重定向到 https?

php - 如何从 Laravel session 中删除数组

PHP session 变量即使在同一页面上也不会更新

java - 在 Servlet session 中缓存 Hibernate 实体

PHP session 销毁

security - 如何在网站上通过 session 管理多个状态?

javascript - 使用js脚本的PHP重定向无法正常工作