2014-10-08 59 views
0

結束會議我有一個會話建立這樣的:問題 - 關於註銷

<?php 
session_start(); 
include 'conconfig.php'; 
$con = new mysqli(DB_HOST,DB_USER,DB_PASS,DB_NAME); 

$email = $_POST['email']; 
$pass = $_POST['pass']; 

$query = "SELECT * FROM tempusers WHERE user='$email' AND pass='$pass'"; 
$result = mysqli_query($con,$query)or die(mysqli_error()); 
$num_row = mysqli_num_rows($result); 
$row=mysqli_fetch_assoc($result); 
if($num_row >=1) { 
    echo 'true'; 
    $_SESSION['uName'] = $row['uName']; 
    } 
else{ 
    echo 'false'; 
} 
?> 

,在我logout.php我有

<?php 
    session_start(); 
    session_unset(); 
    unset($_SESSION['uName']); 
    session_destroy(); 
    header("Location:index.php"); 
?> 

但沒有的session_unset();unset()session_destroy();似乎不工作,因爲進入頁面後,我仍然可以使用瀏覽器「後退」按鈕並返回到受限制的頁面!除了header()不會將頁面更改爲index.php您能否讓我知道我在做什麼錯誤以及如何修復它?

基本上,我在受限頁面註銷鏈接是這樣

<a href="logout.php" >Logout</a> 

感謝

更新: 這裏是會議的代碼,我在

受限頁面頂部
<?php 
session_start(); 
    if(empty($_SESSION['uName'])){ 
    header('Location: login.php'); 
} 
?> 
+1

如果你回到它進入數據庫並授權你的頁面(假定POST被重新發送),那麼IF將爲TRUE,並且會話再次設置。 – James 2014-10-08 23:52:58

+0

謝謝詹姆斯,但我沒有明確你的意思? – Suffii 2014-10-08 23:56:39

+0

您的問題並不完全清楚您的登錄流程,我的意思是:您將POST表單數據寫入上面的腳本,您以憑據正確登錄,會話已設置,現在登錄到下一頁,單擊註銷,您已經註銷,您點擊後,POST數據仍然被設置,並且檢查數據庫中的數據再次返回TRUE(如POST數據之前所做的那樣),您的會話將再次創建。 - 如果在logout.php文件結尾回顯你的會話(並在echo之後使用'exit()'),你會得到什麼?它仍然設置? – James 2014-10-09 00:01:12

回答

0

嘗試重新生成會話ID並銷燬所有數據。

<?php 
    session_start(); 
    session_unset(); 
    session_destroy(); 
    session_write_close(); 
    setcookie(session_name(), '', 0, '/'); 
    session_regenerate_id(true); 
    header("Location:index.php"); 
    exit(); 
?> 
+0

嗨slapyo,謝謝你的回覆,但我仍然得到相同的結果 – Suffii 2014-10-08 23:55:26

+0

重定向工作?在打開PHP標記或session_start()函數之前沒有空白區域? – slapyo 2014-10-09 04:05:42

+0

不,我只是複製你給的所有東西,但都一樣! – Suffii 2014-10-09 06:44:07