PHP 在根目录中设置的会话变量在子目录中不可见

PHP Session Variable Set in Root not Visible in Subdirectory

我在带有 Godaddy 的 windows 共享主机 (IIS) 上安装了 Wordpress 运行ning。 Wordpress 运行正在退出它自己的子目录“/wordpress”。如果我设置 PHP 会话值,例如$_SESSION["test1"] = "value set from root: /";在来自 root 的 PHP 中,只要我的 PHP 代码是 运行ning out root,我就可以看到会话的值。如果我尝试从 /wordpress 文件夹访问此会话值,则找不到它。

反之亦然。如果我在/wordpress及其子目录下设置session值,只要在/wordpress文件夹内操作,就可以很好的查看session及其值。如果我尝试访问从 /wordpress 根目录中设置的会话值,则无法访问它。

我检查了会话 ID,它们在 root 和 /wordpress 文件夹中都是相同的。我检查了两者设置的 cookie,它们具有相同的路径和域。

我不知道为什么从 root 和 /wordpress 文件夹设置 PHP 会话值不是全局的。任何帮助,将不胜感激。谢谢

/set_session.php

<?php
session_start();
$_SESSION["test1"] = "value set from root: /";
?>

/wordpress/set_session.php

<?php
session_start();
$_SESSION["test2"] = "value set from wordpress subdirectory: /wordpress";
?>

view_session.php(我运行这个来自root和/wordpress)

<?php
session_start();
echo "<h3> PHP List All Session Variables</h3>";
   foreach ($_SESSION as $key=>$val)
    echo $key." ".$val."<br/>";
?>

如果我 运行 从 /view_session.php 查看会话脚本,我只能看到 "test1" 的值,因为它是从 /set_session.php.[=14= 设置的]

如果我 运行 从 /wordpress/view_session 查看会话脚本,php 我只能看到 "test2" 的值,因为它是从 /wordpress/set_session 设置的。 php.

首先,我要说 GoDaddy 支持没用。他们的立场是,因为没有官方 "error" 他们无法帮助我,尽管有示例基本代码可以证明问题,但这不是他们的错。

当我安装 WordPress 时,我使用他们的 Plesk 自动安装选项为我安装 WP。它将 WordPress 安装到它自己的子目录中。这很好,但是他们的安装过程使 /wordpress 文件夹成为自己的虚拟目录,这导致其中的所有内容 运行 在其自己的应用程序 pool/thread 下。这导致 /wordpress 目录与站点内其他目录之间的会话不同。

我遇到了类似的问题,因为根文件夹中有一个 php.ini 文件。该文件只有一个更改 max_input_vars 的指令。我删除了文件并改为在 cPanel 中设置 max_input_vars,然后我的会话突然在子文件夹之间正确共享。参见