首页 > 解决方案 > 什么可能导致 PHP 应用程序在 Apache 上运行,MySQL 数据库冻结直到清除 cookie?

问题描述

有一个旧的 PHP(版本 4 或 5,我不太确定)应用程序在带有 Apache2 的旧 CentOS(不知道版本)上运行。它曾经使用 MyISAM 存储引擎连接到 MySQL 4 数据库。数据库与应用程序托管在同一台服务器上,如果这很重要的话。PHP 应用程序使用数据库进行会话管理:它将在其中一个表(Employees)中写入会话 ID,并在执行注销时将其删除。

MySQL 方面最近有一个更新:数据库被移动到一个更新的(版本 5.7.29)远程服务器,运行 Ubuntu 18。数据库也被转换为 InnoDB。SQL 模式设置为“”(空),因为它以前在旧数据库上。

为了将另一个应用程序连接到与初始 PHP 应用程序相同的数据库,这是必要的。另一个应用程序是用 Django 3 编写的,并在单独的服务器上运行(也是 Ubuntu 18,带有 Apache 2.2)。Django 应用程序没有问题,一切运行顺利。我不知道这是否重要,但它也使用带有 PHP 会话 ID 的表。

问题如下:多个用户将连接到 PHP 应用程序并做一些事情(插入资产、查看资产、插入员工等)。我不知道为什么,但是对于其中一些用户,应用程序会突然冻结。一些用户可以访问该网页,而另一些则不能。有时它会在尝试登录时冻结,有时在尝试注销时,有时在做事的过程中。如果同一用户尝试从另一个浏览器连接 PHP 应用程序,该应用程序将正常工作,但在初始浏览器上仍然没有响应。如果它清除冻结浏览器上的 cookie 并刷新,则应用程序将正常工作。

问题是我无权访问运行 PHP 应用程序的服务器。我只能访问数据库和 Django 应用程序。使用浏览器的开发者工具,我可以看到 PHP 应用程序将设置 2 个 cookie:PHPSESSID (expires/max age: session) 和 sessionid (expires/max age: sometime in 2021 and secure),两者具有相同的值写入数据库表中的会话 ID。

该问题显然与会话有关,因为一旦清除 cookie 或更改浏览器,它就会消失。但是,问题的根源可能是什么?

标签: phpmysqllinuxapachesession

解决方案


推荐阅读