PHP-在执行header()时取消设置会话变量


PHP - Session variable unset while doing header()

我一直在web上进行深入研究,寻找解决此错误的方法,但我还无法修复它。让我向你介绍一下情况:

SCRIPT1.php:

if(isset($_SESSION['LoadFile'])){
    echo "<span>";
    $MsgId = 91;
    $Msg = GetMsg($language, $MsgId);
    echo $Msg . " ";
    echo "<input name='"Fleet'" id='"Fleet'" type='"file'" />";
    echo "</span>";
}else{
echo "<span>";
    $MsgId = 169;
    $Msg = GetMsg($language, $MsgId);
    echo $Msg . " ";
    $MsgId = 22;
    $Msg = GetMsg($language, $MsgId);
    echo "<a href='"".$linkpath."inc_load_file.php'">".$Msg."</a>";
echo "</span>";
}

inc_load_file.php内容:

<?php
$_SESSION["LoadFile"] = "Load, please";
$_SESSION["ShowLoadingOpt"] = "Show";
//echo $_SESSION["LoadFile"] <---This works correctly, the variable is being properly created.
header("Location: ".$_SESSION["PrevLoc"]);
exit;
?>

注意,如果我在Script1的乞求中执行print_r($_SESSION),它会显示以下结果:

Array ( [UID] => 1 [UName] => Santi [USurname] => Márquez [ULvl] => 1 [ULang] => en_Gb [Logged] => 1 [UEmail] => xxx@xxx.com [User] => smarquez [UCreationDate] => 2015-10-14 [UAccessTimes] => 162 [UALDesc] => Administrator [CountryCodeKPIReportsGenerator] => 2 )

我的网页应该显示这样的消息:

"文件已加载。如果您想加载新文件,请单击此处。"

如果单击链接,则执行inc_load_file.php。它创建session variables并返回到script1.php。完成后,网页应该显示一个文件输入,但实际上,它仍然显示链接。未设置session变量。

你能帮我检查一下为什么在inc_load_file.php中创建的session变量在执行header() function后没有正确返回吗?

事先非常感谢你的帮助。

  1. 在脚本的开头、尝试访问$_SESSION之前以及向浏览器输出任何内容之前添加session_start()
  2. $_SESSION["PrevLoc"]设置在哪里?您在Location标头中使用它,但我们看不到您设置了它的值

感谢您的回答:)我目前正在使用wamp,会话正在自动启动。它已经正确启动,这就是为什么我能够将所有这些数据保存在$_SESSION数组中:

[UID] => 1
[UName] => Santi 
[USurname] => Márquez 
[ULvl] => 1 
[ULang] => en_Gb 
[Logged] => 1 
[UEmail] => xxx@xxx.com 
[User] => smarquez 
[UCreationDate] => 2015-10-14 
[UAccessTimes] => 162 
[UALDesc] => Administrator 
[CountryCodeKPIReportsGenerator] => 2

因此,问题不在于会话创建。它已正确创建,但在Header()之后未设置$_SESSION["LoadFile"]和$_SESSION["ShowLoadingOpt"]。

另一方面,$_SESSION["PrevLoc"]包含用户所在的上一页。出于安全原因,我从print_r结果中删除了一些变量。无论如何,我也尝试过使用$_SERVER['HTTP_REFERER'],但都不起作用。

再次非常感谢您的支持:)