我在本地使用 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 创建一个新的会话文件。