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


Session variables lost after header redirect

请耐心等待,如果这看起来与这里发布的其他问题相似,我已经完成了提供的所有答案,但还没有解决我的问题。我已经把我的问题降到最低限度了。

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

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!";
?>

session_id()需要在session_start()之前调用

如果指定了id,它将替换当前会话id。session_id()需要在session_start()之前调用意图根据会话处理程序的不同,并非所有字符都是会话id中允许。例如,文件会话处理程序只允许使用a-z a-z 0-9、(逗号)和-(减去)!

注意:使用会话cookie时,请为session_id()指定一个id将始终在调用session_start()时发送一个新的cookie,不管当前会话id是否与设置

session_id()-手动

您还可以检查是否设置了基于cookie的身份验证。

请注意,如果用户发布url,他们可能会将会话传送到另一个客户端。

page2.php上,交换前两条线路。更改

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

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

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