标头重定向后会话变量丢失

时间:2012-07-09 14:44:10

标签: php session redirect

如果这看起来类似于此处发布的其他问题,请耐心等待,我已经完成了所有提供的答案,但没有解决我的问题。我已将问题减少到最低限度。

  1. 我有两页(page1.php,page2.php)
  2. Page1.php创建会话变量,如果设置了会话变量,则将浏览器发送到Page2.php
  3. 在page2.php上,浏览器应该显示在Page1中设置的会话变量的值。 PHP
  4. 我的问题是page2.php将会话变量视为未设置。
  5. 我已尝试过其他用户发布的堆栈溢出所有解决方案,您可以从下面的代码中看到:

  6. page1.php中

    <?php
    //start the session
    session_start();
    
    //set the session
    $_SESSION['mysession'] = "Hello";
    
    
    if(isset($_SESSION['mysession'])){
        //redirect the person to page 2
        session_write_close();
        header("Location: page2.php?PHPSESSID=".session_id());
        exit();
    } else {
     echo "Session Not Set";
    }
    ?>
    

    使page2.php


    <?php
    //start the session
    session_start();
    session_id($_GET['PHPSESSID']);
    
    if ( isset ($_SESSION['mysession']) )
       echo $_SESSION['mysession'];
    else
       echo "Session not set!";
    ?>
    

2 个答案:

答案 0 :(得分:2)

需要在session_start()

之前调用

session_id()

  

如果指定了 id ,它将替换当前的会话ID。   需要在session_start()之前调用session_id()   目的。根据会话处理程序,并非所有字符都是   在会话ID中允许。例如,文件会话处理程序   只允许a-z A-Z 0-9范围内的字符,(逗号)和 -   (负)!

     

注意:使用会话Cookie时,为session_id()指定ID   调用session_start()时将始终发送新的cookie,   无论当前会话ID是否与当前会话ID相同   集。

session_id()-Manual

您还可以检查您是否拥有基于Cookie的身份验证设置。

请注意,如果用户发布了网址,他们可能会将会话带到另一个客户端。

答案 1 :(得分:1)

page2.php上,交换前两行。改变

session_start();
session_id($_GET['PHPSESSID']);

session_id($_GET['PHPSESSID']);
session_start();

请参阅此处的Parameters部分..http://php.net/manual/en/function.session-id.php