会话在不同目录的页面之间不起作用

时间:2013-04-06 05:03:39

标签: php apache session

自从过去两天以来,我一直在研究这个问题,但仍然无法解决。

我在根目录中有两个脚本,其中会话已注册并在我再次访问该页面时保持持久,但是当我要从子目录脚本访问该页面时,表明没有注册会话。

详细解释如下:

问题是当我从根目录脚本中启动start_session()时 那是:http://www.kstreethome.com/test.php它工作正常

/test.php的代码

<?php

error_reporting(E_ALL);

echo "This is session save path : " . session_save_path() . "</br>";
//echo phpinfo();
    if(!isset($_SESSION['User']))
    {
        echo "Session not set </br>";
                    session_start();
                    $_SESSION['User'] = "Hiren";
                    $_SESSION['AccessType'] = "U";
                    $_SESSION['UserType'] = "W";
                    $_SESSION['UserID'] = "123";
                    $_SESSION['DataUser'] = "Test";
                    $_SESSION['Password'] = "Test";

        echo session_id();

        echo $_SESSION['User'];
        echo $_SESSION['AccessType'];
        echo $_SESSION['UserType'];
        echo $_SESSION['UserID'];
        echo $_SESSION['DataUser'];
        echo $_SESSION['Password'];     
    }
    else
    {
    echo "Session set </br>";

            echo $_SESSION['User'];
        echo $_SESSION['AccessType'];
        echo $_SESSION['UserType'];
        echo $_SESSION['UserID'];
        echo $_SESSION['DataUser'];
        echo $_SESSION['Password']; 



    }


?>

当我从子目录Ajax脚本中启动start_session()时 那就是:http://www.kstreethome.com/Ajax/test.php它不起作用但是在这个脚本中它存储会话并且可以在同一个运行中访问但是当我重新加载/Ajax/test.php时会话被破坏而我必须重新开始。

/Ajax/test.php的代码

<?php

error_reporting(E_ALL);

echo "This is session save path : " . session_save_path() . "</br>";
//echo phpinfo();
    if(!isset($_SESSION['User']))
    {
        echo "Session not set </br>";
                    session_start();
                    $_SESSION['User'] = "Hiren";
                    $_SESSION['AccessType'] = "U";
                    $_SESSION['UserType'] = "W";
                    $_SESSION['UserID'] = "123";
                    $_SESSION['DataUser'] = "Test";
                    $_SESSION['Password'] = "Test";

        echo session_id();

        echo $_SESSION['User'];
        echo $_SESSION['AccessType'];
        echo $_SESSION['UserType'];
        echo $_SESSION['UserID'];
        echo $_SESSION['DataUser'];
        echo $_SESSION['Password'];     
    }
    else
    {
    echo "Session set </br>";

            echo $_SESSION['User'];
        echo $_SESSION['AccessType'];
        echo $_SESSION['UserType'];
        echo $_SESSION['UserID'];
        echo $_SESSION['DataUser'];
        echo $_SESSION['Password']; 



    }


?>

两个文件中的代码相同,并且用于测试目的

另一个奇怪的事情是在root脚本/test.php中它说会话路径''默认为null,因为我没有更改默认值为inn的php.ini,但是在脚本/Ajax/test.php中它表示会话保存路径是/ tmp奇怪吧?

毋庸置疑,它可以正常使用本地服务器,但不能托管服务器 所以请在这个问题上指导我。

6 个答案:

答案 0 :(得分:2)

session_start()放在每个页面的顶部

<?php
 session_start();
 error_reporting(E_ALL);

答案 1 :(得分:2)

在使用之前你需要开始激情

 <?php 
 session_start();
 // your code
 ?>

答案 2 :(得分:1)

您需要在访问$ _SESSION之前调用session_start()。将它放在每个脚本的顶部,看看是否能解决问题。

答案 3 :(得分:1)

你需要在使用$ _SESSION之前调用session_start(),但我真的建议你创建一个包装类来处理所有这些,这样你就不会有一堆混乱。

$session = new Session();
$session->set('key', 'val');

答案 4 :(得分:1)

始终使用session_start()

启动代码
<?php
 session_start();
 error_reporting(E_ALL);

答案 5 :(得分:1)

用户<?php session_start()在获取或设置任何会话值之前的第一行。