标头重定向后会话似乎消失了


Session seems to disappear after header redirect

到目前为止,我有四页:

index.php
login.php
setsessionconfig.php
account.php

背景:

当我从索引中单击带有Facebook按钮的登录时,它会带我登录.php如果用户已经在该站点注册,则它不会通过Facebook网站,它只会继续。登录.php 提取会话的必要信息,然后标头重定向到 setsessionconfig.php其中包含以下代码:

登录.php加载视觉对象有 5 秒的延迟,然后重定向到...

header( "refresh:5;url=".URLBASE."/setsessionconfig.php?uid=".$uid."&email=".$email );

设置会话配置.php

$uid = isset($_GET['uid']) ? $_GET['uid'] : "";
$email = isset($_GET['email']) ? $_GET['email'] : "";
if( $uid != "" && $email != "") {
  session_start();
  $_SESSION[SESSION_UID] = $uid;           
  $_SESSION[SESSION_EMAIL] = $email;
  $_SESSION[SESSION_IS_LOGGEDIN] = 1;
  header("Location: account");
}

问题所在

当setsessionconfig.php重定向到帐户时.php它会检查用户是否通过SESSION_UID全局变量登录,然后显示用户信息或显示"您未登录"文本。无论我做什么,我认为标头重定向到帐户.php正在破坏会话变量。

我什至检查了会话是否可用,帐户.php中的以下代码。

function is_session_started()
{
    if ( php_sapi_name() !== 'cli' ) {
        if ( version_compare(phpversion(), '5.4.0', '>=') ) {
            return session_status() === PHP_SESSION_ACTIVE ? TRUE : FALSE;
        } else {
            return session_id() === '' ? FALSE : TRUE;
        }
    }
    return FALSE;
}
if ( is_session_started() === FALSE ) 
    echo "<script>console.log('FALSE');</script>";
else
    echo "<script>console.log('TRUE - ".session_id()."');</script>"; 

不幸的是,该部分实际上返回了 TRUE 和会话 ID...所以我有点卡住了,因为我以前从未遇到过这个问题......

尝试在标题后使用 exit();

由于函数is_session_started,返回 TRUE 并返回会话 ID,显然会话 ID 已正确传递。

我希望帐户.php代码看起来像这样

<?php               
session_start();
if (! empty($_SESSION['SESSION_UID']))
{
?>
your code here
<?php
}
else
{
     echo 'You are not logged in.';
}
    ?>

编辑:

尝试

$_SESSION['SESSION_UID'] = $uid;           
  $_SESSION['SESSION_EMAIL'] = $email;
  $_SESSION['SESSION_IS_LOGGEDIN'] = 1;