我有一個頁面login.php,它處理用戶名和密碼,如果成功,它將設置會話變量,然後將用戶重定向到home.php。 login.php中的相關部分是在這裏:在設置會話變量時是否有延遲?僅在第一次嘗試時失敗
if ($pwdHash == $storedpass) {
$success = true;
$sessionStatus = session_status();
if ($sessionStatus !== PHP_SESSION_ACTIVE) {
session_start();
}
$_SESSION['user_id'] = $user;
$_SESSION['logged_in'] = true;
session_write_close();
header('Location: http://www.examplesite.com/home.php');
header("HTTP/1.1 303 See Other");
die("redirecting");
}
然後home.php嘗試收集會話變量
$sessionStatus = session_status();
if ($sessionStatus !== PHP_SESSION_ACTIVE) {
session_start();
}
$loggedIn = $_SESSION['logged_in'];
的問題是,在第一登錄嘗試,$ _SESSION [」 logged_in']未定義,即使login.php成功,也會生成錯誤。
Notice: Undefined index: logged_in
$ _SESSION的的var_dump返回一個空數組,但sessionStatus報道說,會議已經開始,它沒有執行在session_start。
這迫使用戶第二次登錄,然後一切都很好。那麼,重定向發生得太快,會話變量無法設置?我應該延遲重定向嗎? (以及我該怎麼做?)或者這是我做錯了什麼?
編輯:我已經根據對類似問題的回答檢查了我的主機,並確認一個會話永遠不會由多個服務器提供服務,並且不需要啓用粘滯會話或類似的任何事情。我還根據下面提供的答案和其他一些研究更新了上面的代碼,但錯誤仍然存在。
讓我們在上次編輯後的幾天後,這個問題似乎已經解決了。至少現在。 –