Macos 在 Apache 中更改用户会破坏 PHP SESSION 持久性

Macos 在 Apache 中更改用户会破坏 PHP SESSION 持久性

我在本地使用 Macos 内置的 Apache 服务器进行开发。我开发了一个使用 PHP 并依赖会话 cookie 来持久保存会话的网站。使用默认的 Apache 设置,一切都运行良好,并且会话数据可以正确持久保存。

为了便于开发,我想将 Apache 中的用户和组更改为我的用户名和组。我按照在网上找到的说明,通过编辑 /etc/apache2/httpd.conf 来完成此操作。重新启动 Apache,一切似乎都运行良好 -<?php print `whoami` ?>显示预期的用户名(我的)。

然而,我现在开始观察到 $_SESSION 变量不再存在。

我 grep 了 /etc/php.ini,查看是否有包含“_www”(默认 Apache 用户和组)的行,认为 PHP 配置也必须更改才能同步。然而 grep 没有返回任何行。

有人知道这里发生了什么,以及如何解决这个问题?

编辑:我已检查会话 ID session_id(),并验证页面之间使用相同的会话 ID。

答案1

PHP 将会话文件保存在 /var/tmp 中,例如 sess_1aas3b0jgjbbsoktg3fcehu5je。此处的会话文件具有 600 个权限,因此只有所有者可以读取或写入它们。浏览器使用相同的 ID 保存会话 cookie。在更改 Apache 配置中的用户和组之前,会话 ID 被写为 _www 作为所有者。在更改 Apache 配置中的用户和组之后,如果会话 cookie 在浏览器中仍然存在,它会告诉 PHP 访问该 ID,但现在用户是 xyz,它无法读取或写入该文件。

简单的解决方案是清除浏览器中的会话 cookie(或等到它过期)。PHP 现在将使用新所有者 xyz 创建一个新的会话文件。

相关内容