当我们将项目从 beta 测试服务器转移到我们的实时服务器时,我们遇到了以下情况:
仅当访问它们的文件与创建它们的文件位于同一文件夹中时,才能访问会话变量。在我们的测试版服务器上情况并非如此。所以我创建了三个非常简单的测试文件:
测试.php
<?php
session_id("581186accf44d7e80df40d0b5a47fb7d");
session_start();
$_SESSION['myvariable'] = 'Hello World';
?>
<html>
<body>
<p><a href="page2.php">Same folder test</a></p>
<p><a href="test/page2.php">Subfolder test</a></p>
</body>
</html>
然后我们在同一文件夹和 test/ 文件夹中复制了以下文件。
page2.php
<?php
session_start();
print 'Here is page two, my session variable and my session cookie: ';
print $_SESSION['myvariable'];
print $_COOKIE['PHPSESSID'];
exit;
?>
结果如下:page2.php
Here is page two, my session variable and my session cookie: Hello
World581186accf44d7e80df40d0b5a47fb7d
测试/page2.php
Here is page two, my session variable and my session cookie: 581186accf44d7e80df40d0b5a47fb7d
如您所见,会话变量已消失。但是会话 ID cookie 保留在子目录中,因此不是 cookie 问题。
我查看了 phpinfo(); 中的会话块;除了 session.save_path,它是在 beta 服务器上设置的,而不是在 live 服务器上设置的(这可能意味着它将默认为 /tmp),两者的配置是相同的。
此外,我们没有可能将 domain.com 路径更改为 www.domain.com 路径的 .htaccess 文件。
因为这个测试在我们的 beta 服务器上运行,我得出的结论是这是一个 php 配置问题,但如果有人能指出我需要更改的参数,那将不胜感激!