2012-04-04 207 views
5

我有php註銷頁面。當用戶點擊註銷鏈接時看到此頁面並重定向到索引頁面。但是當點擊後退按鈕時,我會看到帶有用戶數據的previouse頁面。當然,當我刷新頁面,我沒有看到previouse頁面和數據。我點擊註銷後檢查了其他代碼(drupal),然後點擊返回按鈕,我沒有看到previouse頁面並查看登錄頁面。我的問題在哪裏?如何解決這個問題?註銷後防止返回頁面

註銷頁面:

if (isset($_GET['req']) && $_GET['req'] == 'logout') { 
     session_start(); 
     session_destroy(); 
     header("Location: index.php"); 
    exit(); 
} 

感謝

+0

你不能用PHP做到這一點,你需要用JS – Michal 2012-04-04 17:53:45

+3

的做到這一點'previous'頁面仍然在瀏覽器的緩存中。如果您想要阻止對需要主動登錄的頁面執行「返回」操作,則必須使其無法訪問。 – 2012-04-04 17:54:32

+0

使它們不可緩存不會阻止瀏覽器將它們存儲在歷史記錄中... imo – Michal 2012-04-04 17:56:07

回答

2

的代碼是正確的。其實你不需要阻止人們點擊後退按鈕。如果你真的認爲這很重要,你可以在logout.php中保存一個cookie或其他東西,主頁面會檢查AJAX是否設置了這個cookie。如果是的話,你可以用JS重新加載頁面(當然也可以不設置cookie)。但是一個非常安全的方式並不存在。

-3

將此添加到您的代碼將阻止用戶點擊返回按鈕。

 ignore_user_abort(true); 
+0

不,它不會......'ignore_user_abort()'設置客戶端斷開連接是否會導致腳本中止。 – Michal 2012-04-04 18:11:37

1

你實質上是問如何清除用戶的瀏覽器歷史記錄和緩存他們有權訪問的頁面,但不再執行。當你登錄一個用戶時,你將消除他們重新加載頁面的能力,並且你可以做的事情很少(如果有的話),可以防止瀏覽器向他們展示他們曾經允許加載的內容它是陳舊的數據)。重要的一點是,當他們重新加載時,他們不會獲得新的數據 - 你無法擦除已經加載的緩存。

編輯:也想讀其他人的意見後,補充一下:你可以告訴瀏覽器不緩存任何數據,這將要求他們重裝所有的東西,即使他們按後退按鈕,但你」 d也要求他們重新加載所有的東西,即使他們通過認證 - 這是你必須忍受的折衷。這顯然取決於你的網站的具體情況 - 但在大多數情況下,我認爲這不值得進行折衷。您的主機需要更多帶寬,因爲資源會在每次頁面加載時重新下載,頁面加載時間會更長,因爲瀏覽器無法依賴本地緩存,因此您的應用程序對用戶來說自然會變得更慢。只要數據不是絕對必要的,除非他們正在積極登錄,我只會發現一種禮貌而不引人注意的方式告訴用戶註銷並關閉瀏覽器窗口,以減少窺探的可能性眼睛看到他們不應該的數據。

0

用途使用$_GET但沒有驗證任何形式$_SESSION

試試這個

session_start(); 
if (isset ($_GET ['req']) && $_GET ['req'] == 'logout') { 
    $_SESSION ['auth'] = false ; 
    session_destroy(); 
} 

if (! isset ($_SESSION ['auth']) || $_SESSION ['auth'] == false) { 
    header ("Location: index.php"); 
    exit(); 
} 

確保在您的主網頁,你有這樣的事情

session_start(); 

if(/** login Condition **/) 
{ 
    $_SESSION ['auth'] = true ; 
} 

if (! isset ($_SESSION ['auth']) || $_SESSION ['auth'] == false) { 
    header ("Location: index.php"); 
    exit(); 
} 

感謝

:)

2

我認爲這主要是客戶端問題,並由於瀏覽器緩存頭。

什麼是修復?

在我看來,你需要設置靜態內容和非靜態內容緩存頭正常

靜態內容(CSS/JavaScript的/圖片):read this

爲PHP頁面本身:header("Cache-Control", "no-store, no-cache, must-revalidate");

應該做的竅門

0

這是一個簡單而快速的解決方案。在登錄表單標籤中添加target =「_ blank」,它在不同的窗口中顯示內容。然後註銷後只需關閉該窗口,後退按鈕問題(Safari瀏覽器)就解決了。即使嘗試使用歷史記錄,也不會顯示該頁面,而是重定向到登錄頁面。對於Safari瀏覽器而言,這很好,但對於Firefox等session_destroy();照顧它。

0
<? 
session_start(); 
if(!isset($_SESSION['username']) && !isset($_SESSION['password'])){ 
header("Location:../index.php"); 
exit; 
} 
else{ 
session_destroy(); 
} 
?> 

粘貼此每一頁上或者在您註銷是

<?php 
session_start(); 
session_unset(); 
session_destroy(); 
header("Location:../index.php"); 
exit; 

user_logout.php