我正在登錄頁面,一切工作正常,但刷新安全頁面或重定向到另一個頁面變量消失。刷新/重定向後PHP會話變量丟失[解決]
登錄:
<?php session_start();
//connection to database and other stuff
if ($user == $dbuser && $pass == $dbpass) {
$_SESSION['user'] = $user;
$_SESSION['authenticated'] = "yes";
$suser = $_SESSION['user']; //just to test if session works
}
?>
安全頁面:
<?php session_start(); ?>
//small amount of html here
<?php
$suser = $_SESSION['user'];
$sauth = $_SESSION['authenticated'];
if ($sauth != 'yes') { //not completed yet (needs user name check)
echo "<a href='./'>Log in</a> first!";
require ('./login.php');
die;
} else {
//not so important code here
}
?>
//rest of html here
我沒有發現任何錯誤,錯誤日誌文件是乾淨的,所以必須是別的東西。重定向到保護頁面後會話正常工作,但正如我前面所說的刷新頁面或其他重定向清除會話變量。
頁:http://nano.filiparag.com/admin/ 如果你想測試它只是要求用戶名和密碼
注:
現在我試着用setcookie()
這樣做的,也沒有工作再次
編輯:
問題出在註銷按鈕。我爲它製作了單獨的PHP文件,現在一切正常。
是否總是定義'$ dbuser'和'$ dbpass'?如果它們不是,那麼'if'塊將返回true,因爲所有4個變量都可能是undefined/falsey。這會覆蓋你的'$ _SESSION ['user']'和$ _SESSION ['authenticated']'值。 – jraede
@jraede不要擔心db *,因爲它們總是被定義的 - 從數據庫中拾取。 –
你是正面的嗎?從你的代碼中,我可以看到唯一可以將這個人記錄下來的代碼。發佈更多的代碼可能會有所幫助,以及登錄後如何將其重定向到安全頁面的說明。 – jraede