【问题标题】:session not working between pages of different directories会话在不同目录的页面之间不起作用
【发布时间】:2013-04-06 05:03:39
【问题描述】:

从前两天开始我一直在研究这个问题,但仍然无法解决。

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

详细解释如下:

问题是当我从根目录脚本 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']; 



    }


?>

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

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

不用说它在我的本地服务器上运行良好,但在托管服务器上却不行 所以请在这个问题上指导我。

【问题讨论】:

    标签: php apache session


    【解决方案1】:

    session_start() 放在每一页的顶部

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

    【讨论】:

      【解决方案2】:

      在使用之前你需要开始游戏

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          始终以 session_start() 开头代码

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

          【讨论】:

            【解决方案5】:

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

            【讨论】:

              【解决方案6】:

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

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

              【讨论】:

                猜你喜欢
                • 2012-02-10
                • 2013-03-21
                • 1970-01-01
                • 1970-01-01
                • 2013-10-09
                • 1970-01-01
                • 1970-01-01
                • 2017-03-24
                相关资源
                最近更新 更多