2015-04-28 42 views
0

我已經看到以下問題,並嘗試修改部分答案,但沒有運氣:'我如何禁用用戶按下注銷並銷燬會話後的後退瀏覽器按鈕?如何使用php註銷後刪除會話

我知道這個話題已經討論過很多,人們討厭禁用後退按鈕。但是如果我有一個關於它的重要信息的數據庫,一旦這個人註銷,我如何防止某人從後退按鈕返回到上一頁。如果看見了,下面可以回答這個問題

一個答案是: 一種方法我已經看到了故意破壞後退按鈕的用途是通過在應用程序中的所有網址的令牌,每個表單中。每個頁面都會重新生成令牌,一旦用戶加載新頁面,前一頁中的任何令牌都將失效。當用戶加載一個頁面時,該頁面只會顯示正確的標記(已被賦予前一頁上的所有鏈接/表單)傳遞給它。任何人都可以提供一些見解如何做到這一點?

<?php 
session_start(); 
session_destroy(); 
$_SESSION = array(); 
header("location: login.php"); 
?> 

標題去哪裏?

header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); 



<?php 
session_start(); //starts the session 
if($_SESSION['user']){ //checks if user is logged in 
} 
else{ 
    header("location:login.php"); // redirects if user is not logged in 
} 
$username = $_SESSION['user']; //assigns user value 
$id_exists = false; 
?> 

我有一個checklogin.php,檢查用MySQL數據庫中存儲的用戶名和密碼輸入。然後他們被重定向到file1.php。在這個頁面上有一個註銷按鈕。上面的代碼存儲在logout.php中。

當用戶註銷時,我不希望他們通過按下後退按鈕來再次訪問文件。由於

+4

禁用後退按鈕不能,也不應該實現 – Epodax

+0

而不是session_destroy,使用unset($ _ SESSION [「value1」);未設置($ _ SESSION [ 「值2」]); ecc – PHPMan

+0

檢查此問題http://stackoverflow.com/questions/16961202/how-can-i-disable-the-back-browser-button-after-user-press-logout-and-destroy-se – Krishna38

回答

1

至於標題,這裏是從我搜索後經常使用的web服務器的那些:

Cache-Control: private, pre-check=0, post-check=0, max-age=0 
Expires: 0 
Pragma: no-cache 

點擊來自搜索結果頁面中的鏈接後按下後退按鈕將顯示在Firefox的錯誤消息。我看到的唯一顯着差異是Expire: 0

+0

謝謝,我會嘗試一下,標題將在file1.php中去,對嗎?(我的所有博客都會有註銷按鈕) – Rus84

+0

一般而言,您通常會將這些標題設置爲您不希望訪問者返回的頁面。所以在這種情況下,我認爲它至少應該是'checklogin.php'。以更一般的方式:由表單的'action'屬性調用的所有腳本。 –

0

登錄頁面:

<?php 
if (isset($_POST['uname'], $_POST['pwd'], $_POST['type'])) { 
    $Username = $_POST['uname']; 
    $Password = $_POST['pwd']; 
    $User_Type=$_POST['type']; 
    if (!(empty($Username) || empty($Password) || empty($User_Type))) 
    { 
     $model = new UsersModel(); 
     $rowsCount = $model->checkUser($Username,$Password,$User_Type); 
     if ($rowsCount!=0) 
     { 
       $_SESSION['user'] = $Username; 
       header("Location:LoginViewController.php"); 

     } else { 
       echo 'Bad user'; 
     } 
    } else { 
     echo 'Please, fill all inputs'; 
    } 
} else { 
    echo 'Bad form sent'; 
} 
?> 
<form name="f1" method="POST" action="" > 
// inputs 
</form> 

LoginViewController.php:

<?php 
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); 

if (!isset($_SESSION['user'])) { 
header('Location: login.php'); 
exit(); 
} 
echo 'You have successfully logged as '.$_SESSION['user'] 
?> 

並添加標題,以強制瀏覽器重新驗證網頁:

logout.php:

<?php 
session_start(); 
session_destroy(); 
$_SESSION = array(); 
header("location: login.php"); 
?> 
+0

這是我嘗試使用的鏈接。我有一個登錄頁面,然後我假設的檢查登錄等同於登錄視圖控制器,然後還有一個登出頁面。一旦我註銷,我可以按下後退按鈕並返回到數據庫。你是否適應了上述腳本爲你工作? – Rus84