2011-07-11 168 views
2

我有一個受保護的頁面,它只顯示登錄用戶的數據,一旦用戶單擊註銷鏈接,它會銷燬會話數據並重定向到另一個頁面。PHP防止在註銷後返回頁面

現在,一旦頁面被重定向到login.php,我可以輕鬆地轉到受保護的後臺頁面,並且可以看到所有信息並保留在頁面上,直到我刷新瀏覽器或關閉它。

在諸如Gmail等網站上,一旦您登錄,就無法返回頁面。這可以如何實施? 謝謝。

編輯:對不起,如果它不清楚,受保護的頁面在頂部有幾行代碼檢查會話是否設置。如果會話沒有設置,那麼它應該重定向到其他頁面。但問題是,如果我點擊瀏覽器上的後退按鈕,它不檢查會話。

回答

4

此行爲可能是由您的瀏覽器/ Web服務器的默認緩存設置引起的。

每當用戶訪問受保護的頁面,嘗試發送插座,以避免頁面緩存:

header('Cache-Control: no-cache, must-revalidate'); 
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); 

這通常應該引起任何後退按鈕按下引起頁面,而不是加載一個完整的重新加載它來自瀏覽器的緩存。

2

把這個在受保護的頁面的頂部:

//Probably caused by back button... Check if logged-in... 
if(!$_SESSION["usernameWhatever"]) 
{ 
    //Do not show protected data, redirect to login... 
    header('Location: login.php'); 
} 

//Show protected data... 

這基本上檢查,如果用戶登錄,如果沒有,重定向到登錄頁面...

要禁用的緩存頁面,把這個網頁的head標籤中:

<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE"> 
+0

我的這些線,但是在瀏覽器不似乎檢查後退按鈕被擊中。 – Roman

+0

@羅曼 - 這可能是由瀏覽器的緩存引起的。你可以用'meta'標籤來控制它。或者在php上Jani的'header'我覺得更漂亮了。 – dpp

0

此代碼解決問題

<?php 
    echo("<script>location.href = './login.php';</script>"); 
?> 
相關問題