2010-06-09 65 views
2

我有一個logout.php頁面從而結束用戶會話和運作良好,並執行以下操作:Safari瀏覽器後退按鈕沒有履行PHP註銷會話

在session_start(); session_unset(); session_destroy();

我剛剛注意到,在使用Safari進行測試時,當您註銷時,您可以單擊後退按鈕以返回到需要身份驗證但未提示的上一頁。在不輸入導航的情況下,您無法離開此頁面,但它不應該首先顯示上一頁。

所以,在我的測試到目前爲止,這是唯一的Safari在Mac OS X上的問題,也有一些關於這一點,但沒有解決其他報告,我能找到:

http://www.experts-exchange.com/Web_Development/Web_Languages-Standards/PHP/Q_23702691.html

我會愛能夠用Safari的後退按鈕禁用這種行爲 - 驚訝這是發生在第一位。

謝謝你,史蒂夫

+3

嗯我不認爲這是你的應用程序的問題,safari只是顯示緩存的數據 – phunehehe 2010-06-09 13:58:39

+0

在其他瀏覽器上,如果我註銷並單擊後退按鈕,我會進入登錄頁面輸入用戶名/密碼。在Safari我註銷並單擊後退按鈕它會「記住」前一頁(聲音緩存相關),即使會話被銷燬也不認證,它應該提示我進行身份驗證。如果我從該頁面導航,那麼它是否會提示我進行身份驗證。 – 2010-06-09 14:11:11

+0

因爲瀏覽器緩存頁面。 – KDOT 2017-09-04 17:07:50

回答

2

確保您服務需要身份驗證的任何頁面被用合適的緩存控制頭一起發送。頁面正在瀏覽器緩存中顯示,通過提供明確禁止緩存的緩存控制,您應該能夠阻止緩存。

http://php.net/manual/en/function.header.php

<?php 
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past 
?> 

專門爲Safari瀏覽器,有大約緩存一些討論和卸載事件,您可能能夠使用以避免緩存。看起來WebKit在緩存方面確實有一些複雜性。

http://webkit.org/blog/427/webkit-page-cache-i-the-basics/

http://webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/

+0

嗨,感謝您的評論。我以前試過這個無濟於事。我只是再次添加它們,它仍然加載需要認證的頁面。問題似乎是基於webkit的瀏覽器,例如Mac和Safari的Safari。 – 2010-06-09 14:13:53

+1

我已經添加了幾個鏈接。當您執行「登錄,註銷,返回」過程時,嘗試使用Safari/Chrome開發人員工具檢查瀏覽器檢測到的HTTP標題(開發工具 - >資源,單擊左側的頁面條目)。 – ptomli 2010-06-09 14:42:08

+0

非常感謝我會研究這一點 - 進一步的搜索讓我對onUnload事件有同樣的結論。謝謝 – 2010-06-09 16:20:05