PHP会话是否跨子目录工作?

New*_*bie 6 php session

我有一个名为System子目录的主目录Subsystem.我在主目录中的会话在子目录中不起作用.

当我echo session_save_path();在两个文件夹中时,他们会告诉我"/tmp".

然后,我试图放入session_save_path("../tmp");我的子目录,但它显示了我"This webpage has a redirect loop".

session.phpSystem目录中:

<?php
session_start( );

if (!($_SESSION['uid']))
{
    header("Location:index.php");
}
else
{
    $_SESSION['uid'] = $_SESSION['uid'];
}
?>
Run Code Online (Sandbox Code Playgroud)

子系统文件夹中的session.php:

<?php
session_save_path("../tmp");
session_start( );

if (!($_SESSION['uid']))
{
    header("Location:index.php");
}
else
{
    $_SESSION['uid'] = $_SESSION['uid'];
}
Run Code Online (Sandbox Code Playgroud)

?>

我已经谷歌搜索了所有,但我仍然无法让它工作.

Ste*_*ley 1

该目录不会影响您的会话状态(给定 Apache-PHP 网站的所有目录都将在标准配置中访问相同的会话)。您不应该使用session_save_path().

我认为问题部分在于您将“uid”设置为自身($_SESSION['uid'] = $_SESSION['uid'];) - 因此可能永远不会真正将其设置为值 - 如果未设置,则可能会无限期地重定向。

我建议进行这个简单的测试,以确保您的会话确实有效:

/session_set.php

<?php
    session_start();
    $_SESSION['uid'] = 123;
Run Code Online (Sandbox Code Playgroud)

/sub_dir/session_get.php

<?php
    session_start();
    echo $_SESSION['uid'];
Run Code Online (Sandbox Code Playgroud)