更新到 PHP 7.4 后,用户会话在 1 小时不活动后丢失

问题描述 投票:0回答:1

我有一个 PHP apache 应用程序,使用 ZendFramework 2 运行(我知道是老派,但我们正在迁移到更新的技术)。以前的 PHP 版本是 5.6,会话持续 10 天(我们将其配置为那么长)我们不希望用户注销,即使在离开计算机 3 天后也是如此。但是当我们升级到 PHP 7.4 时,会话在大约 1 小时后丢失。

起初,我预计它是一个垃圾收集配置。因此,我将 PHP.ini 文件的

session.gc_maxlifetime
更改为 864000(10 天),这应该可以解决问题,但会话在大约 1 小时后仍然被删除。我通过 SSH 查看会话文件夹,可以看到较旧的文件已有 1 小时 3 分钟的历史,没有任何文件早于 1 小时,我多次检查该文件夹。

我当前的 PHP 信息是: PHP 信息

我的 PHP apache 应用程序托管在 AWS EC2 机器上。当我们从 PHP 5.6 升级到 7.4 时,我们从头开始重建 EC2 机器,只需复制 PHP 和 apache 的相同文件和配置。

如果有任何可能有助于解决此问题的额外信息,请告诉我。

TLDR:PHP 从 5.6 更新到 7.4 后,之前的会话生命周期配置无缘无故地变得毫无用处(或者是我在调试数小时后找不到的原因)。

当我登录 PHP 应用程序并等待 1 小时,没有任何刷新,甚至没有打开浏览器时,我预计会话仍然处于活动状态,至少有 10 天不活动。因此用户可以在一天内登录,并且在第二天,他的会话必须仍然处于活动状态。

但是,更新到 PHP 7.4 后,开始发生的情况是:会话在大约 1 小时后过期。然后,如果我让浏览器打开大约 1:30 小时然后刷新,我就会注销。

在 EC2 机器上检查会话文件夹时,我可以看到没有超过 1 小时的文件。

php apache session zend-framework2
1个回答
0
投票

我们解决了这个问题。以防万一有人遇到类似的问题。 DevOps 团队发现 apache2 文件夹中还有另一个 PHP.ini(甚至认为不是

phpinfo()
中的那个)。 PHP.ini 的 gc_maxlifetime 为 1 小时,并且该垃圾收集器正在清除旧会话。增加 gc_maxlifetime 可以阻止会话丢失。

© www.soinside.com 2019 - 2024. All rights reserved.