自从我的虚拟主机升级到 PHP 5.3.3 后,我一直在尝试找出一些烦人的 session 问题。我已经确定,如果存在事件 session ,则从子目录调用 session_start() 会终止现有 session 。例如,我启动了一个 session ,用户登录到 domain.com/index.php,然后用户导航到 domain.com/members/,这触发了 start_session() ...用户的 session 丢失了。
我为此四处寻找,找不到任何类似的东西。是否有一个 PHP 配置可以解释这种行为?
最佳答案
使用该版本的 PHP 多次调用 session_start()
应该不会导致任何问题,但是还有其他可能的原因。
一种可能的解释是客户端的浏览器没有将 session ID 发送回服务器。您可以通过比较两个页面生成的 session ID 来对此进行测试。假设您有一个可以对其进行正确测试的受控环境,您可以使用 session_id()
获取 session 。
也可能是用户访问了不同的网络服务器。由于(默认情况下)PHP 将 session 存储到磁盘,因此多个服务器无法共享 session 信息。如果这是共享主机,则这不太可能是原因。不过,您可以使用 phpinfo()
对此进行测试。它应该给你足够的信息来确定它是否是同一台服务器。对于多服务器系统,我会考虑将 session 存储在 memcache 或 mysql 中。
关于PHP 5.3.3 - 在子目录中运行 session_start() 会终止现有 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8199936/