2014-02-21 123 views
1

我正在登錄頁面,一切工作正常,但刷新安全頁面或重定向到另一個頁面變量消失。刷新/重定向後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文件,現在一切正常。

+0

是否總是定義'$ dbuser'和'$ dbpass'?如果它們不是,那麼'if'塊將返回true,因爲所有4個變量都可能是undefined/falsey。這會覆蓋你的'$ _SESSION ['user']'和$ _SESSION ['authenticated']'值。 – jraede

+0

@jraede不要擔心db *,因爲它們總是被定義的 - 從數據庫中拾取。 –

+0

你是正面的嗎?從你的代碼中,我可以看到唯一可以將這個人記錄下來的代碼。發佈更多的代碼可能會有所幫助,以及登錄後如何將其重定向到安全頁面的說明。 – jraede

回答

0

我想你可以嘗試使用這種

登錄:

<?php session_start(); 
ob_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(); 
    ob_start();?> 

//small amount of html here 
<?php session_start(); ob_start(); 
    $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 
+0

還是一樣。變量消失 –

0

即時猜測你login.php腳本是做與會話變量的東西時,你包括它。我可以看看你的login.php腳本,我會編輯我的答案,然後

+0

我已經找到了錯誤。無論如何,謝謝你的回答! –