簡體   English   中英

標頭重定向后,會話似乎消失了

[英]Session seems to disappear after header redirect

到目前為止,我有四頁:

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

的背景:

當我從索引中單擊帶Facebook的登錄w / facebook按鈕時,它將帶我進入login.php,如果用戶已經在該網站上注冊,則它不會通過facebook網站,而是繼續。 Login.php提取會話的必要信息,然后標頭重定向到setsessionconfig.php,其代碼如下:

login.php加載視覺效果有5秒的延遲,然后重定向到...

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

setsessionconfig.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重定向到account.php時,它將檢查用戶是否通過SESSION_UID全局變量登錄,然后顯示用戶信息,或者顯示“您尚未登錄”文本。 不管我做什么,我都認為標題重定向到account.php破壞了會話變量。

我什至還檢查了會話是否可以在account.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。

我希望account.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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM