簡體   English   中英

注銷后單擊后退按鈕緩存問題

[英]after logout click on back button cache issue

<%
    response.setHeader("Cache-Control","no-cache,no-store,must-revalidate");//HTTP 1.1
    response.setHeader("Pragma","no-cache"); //HTTP 1.0
    response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
%>

注銷后,在登錄頁面上,如果你單擊后退按鈕,它會顯示舊頁面,因為它已登錄。我在jsp中使用了3行以上,並且我在body標簽內的所有jsps中包含了這一行。 這對某些jsps不起作用。 在loggout之后我們需要考慮什么才能停止緩存。 如果一個jsp的表單有Post方法,這種技術不起作用?

在我的Logout操作中,我正在這樣做。

Cookie logoutCookie = new Cookie("somename", null);
logoutCookie.setPath("/somename");
logoutCookie.setMaxAge(0);
ServletActionContext.getResponse().addCookie(logoutCookie);

謝謝。

如果您使用瀏覽器中的后退按鈕,則無法執行任何操作。 該頁面將始終來自緩存。

只需確保在用戶單擊注銷時使會話無效。 這樣,當用戶點擊“返回”並嘗試使用該頁面時,他將被重定向到登錄頁面(如果您的站點編程正確)。

[編輯]

這是我們為http 1.1沒有緩存的標頭:

httpResponse.setHeader("Cache-Control", "private,no-store,no-cache");

我在body標簽內的所有jsps中包含了這個

當HTTP響應已在此時提交時,這可能為時已晚 當已經向其寫入X個字符時將提交HTTP響應,在您的情況下將是HTML <head> 您需要將這些行放在JSP文件的最頂層,而不是放在HTML表示的<body>中。


在一個不相關的說明中,你通過在多個文件上復制相同行代碼來制造一個巨大的設計錯誤。 這不是DRY 每當你需要copypaste代碼,你應該總是停下來問自己,如果沒有執行特定的代碼一個地方。 在您的特定情況下,您應該使用Filter 有關具體示例,請參閱此答案: 阻止用戶在注銷后查看以前訪問過的受保護頁面 此外,在JSP中編寫Java代碼是一種不好的做法。 檢查如何避免JSP文件中的Java代碼?

此外,您的注銷方法很奇怪。 不要將用戶名存儲在某個自定義cookie中。 你基本上是在徹底改造會議。 只需將登錄用戶存儲為會話屬性,並使整個會話無效並發送重定向。

request.getSession().invalidate();
response.sendRedirect(request.getContextPath() + "/home.jsp");

有關會話工作的背景信息,請閱讀: servlet如何工作? 實例化,會話,共享變量和多線程

你有沒有嘗試過response.setHeader("Cache-control","no-store"); response.setHeader("Pragma","no-cache"); response.setDateHeader("Expires", -1); response.setHeader("Cache-control","no-store"); response.setHeader("Pragma","no-cache"); response.setDateHeader("Expires", -1); 我想你錯過了正確位置的引號..

創建一個會話屬性,讓我們說“有效”,並在匹配登錄憑據之后,使用jsp中除null之外的任何值對其進行初始化。 現在使用以下代碼創建verify.jsp:

<%
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
if(session.getAttribute("valid")==null)
{
    out.println("<script>parent.location.href='login.jsp'</script>");
}
%>

現在只需在每個jsp頁面上包含這個jsp文件並完成它。 別忘了寫“session.invalidate();” 在logout.jsp中

希望它能工作.. !!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM