2009-07-29 81 views
4

我有一個經典的ASP網站,使用會話變量來存儲登錄狀態ie。 userid,isloggedin等。在註銷時,會話變量被重置,並且Session.Abandon()被調用,然後被重定向到登錄頁面。在IE7中,我注意到在註銷後,我可以輸入以前訪問過的URL並查看在註銷之前似乎是其狀態的緩存版本。點擊ctl-f5將再次從服務器重新加載並重定向到登錄頁面。這是我想要發生的行爲,即使沒有ctl-f5輸入url也是如此。有誰知道如何得到這種行爲?IE7經典ASP緩存

回答

1

我以前遇到過類似問題,但每當我點擊該網頁上的鏈接,它讓我重新登錄

你可以嘗試要麼復位會話ID。 =「」或sessionID =「XYZ」,並使XYZ在註銷時忽略您的代碼。

你也可以嘗試設置no-cache標頭。

0

你可以發送no-cache,但是這只是一個安靜的表現,只是爲了得到你想要的東西。我更喜歡Liams的建議,並確保您在該頁面上做的所有事情都需要您登錄,這樣,沒有人可以做任何他們不應該做的事情。如果它的電子郵件系統雖然或類似,但人們「可以」查看其他人的電子郵件,那麼在那些情況下是的,而不是緩存敏感信息是要走的路(例如,你不能默認緩存HTTPS頁面)。

您還可以在頭部添加一些javascript,以檢查是否存在「已登錄」Cookie。這會在每次加載頁面時運行,如果沒有cookie存在,那麼JS可以將您重定向到登錄頁面。不是100%的證明,但足夠好。你註銷頁面需要清除這個cookie,並在你的登錄頁面設置它。

2

我認爲mkoryak的答案(使用no-cache標頭)似乎是最好的。如果您只想在用戶登錄時看到某些頁面,最好的方法是指示瀏覽器不要緩存該頁面。此外,諸如調整cookie和使用javascript等方案確定客戶端的登錄狀態只是重新發明輪子。

如果你想利用一些緩存,並且你的頁面不是不斷更新的,那麼一個很好的折衷辦法是將Response.Expires標題設置爲你認爲合適的值(我認爲它是以分鐘爲單位的度量)。