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

时间:2012-12-05 03:02:09

标签: php session

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

当我在两个文件夹中echo session_save_path();时,他们会向我显示"/tmp"

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

session.php目录中的

System

<?php
session_start( );

if (!($_SESSION['uid']))
{
    header("Location:index.php");
}
else
{
    $_SESSION['uid'] = $_SESSION['uid'];
}
?>
子系统文件夹中的

session.php:

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

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

&GT;

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

2 个答案:

答案 0 :(得分:1)

该目录不会影响您的会话状态(给定Apache-PHP网站的所有目录将以标准配置访问同一会话)。您不必使用session_save_path()

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

我建议这个简单的测试,以确保您的会话实际上正在运作:

<强> /session_set.php

<?php
    session_start();
    $_SESSION['uid'] = 123;

<强> /sub_dir/session_get.php

<?php
    session_start();
    echo $_SESSION['uid'];

答案 1 :(得分:0)

会话在服务器上的临时目录中创建一个文件,其中存储了已注册的会话变量及其值。在访问期间,该数据将可供网站上的所有页面使用。

临时文件的位置由名为session.save_path的php.ini文件中的设置确定。请仔细检查这条路。

另外[session-save-path()] [1]获取和/或设置当前会话保存路径。

我认为你不需要写这行,并检查你的php.ini是否正确。

对于会话我发现了一些有用的文章http://www.tutorialspoint.com/php/php_sessions.htm

感谢。