2014-04-29 52 views
3

我正在研究JSP。我知道有很多關於這個話題的帖子,但沒有任何對我有用。我有一個導致歡迎頁面的登錄頁面。當用戶點擊註銷並被重定向到登錄頁面時,會話失效。但是,如果用戶點擊瀏覽器返回按鈕,他將再次進入歡迎頁面,但如果他按下任何其他按鈕或刷新頁面,他將被帶到登錄頁面,因爲會話已過期。但是我不想讓用戶在退出後單擊瀏覽器後退按鈕即可訪問歡迎頁面。我嘗試使用以下內容:如果會話失效,則禁用瀏覽器返回按鈕

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" /> 
<meta http-equiv="Pragma" content="no-cache" /> 
<meta http-equiv="Expires" content="-1" /> 

但它不工作。

我試着使用:

window.history.forward(1); 

它工作正常,但它會導致另一個問題。如果用戶登錄並被帶到歡迎頁面。然後用戶按下一個按鈕,讓我們說「顯示用戶詳細信息」,然後用戶進入「顯示用戶詳細信息」頁面。現在如果用戶點擊後退按鈕返回到歡迎頁面。由於歡迎頁面上的window.history.forward(1),他保持與「顯示用戶詳細信息」頁面相同。

我希望用戶應該能夠使用瀏覽器後退按鈕,如果會話有效。如果會話無效,他不應該能夠使用瀏覽器後退按鈕。

+0

沒關係添加此類 「NoCacheFilter」,我知道了.. !! – learner

+0

$()。ready(function(){ if(document.referrer!='http:// localhost:8181 /'){ history.pushState(null,null,'login'); window.addEventListener 'popstate',函數(){0}歷史。pushState(null,null,'login'); }); } }); –

回答

4

這是完美的工作。我使用以下來清除緩存。並且我在logout.jsp中使會話無效,單擊它時會檢查某個令牌屬性(在用戶登錄時設置),如果找不到它,它會重定向到登錄頁面。

<% 

response.setHeader("Cache-Control","no-cache"); 
response.setHeader("Cache-Control","no-store"); 
response.setHeader("Pragma","no-cache"); 
response.setDateHeader ("Expires", 0); 
    if(session.getAttribute("token")==null){ 
    response.sendRedirect(request.getContextPath() + "/LogOut.jsp"); 

} 
%> 

感謝您的建議,但。我一定會把它付諸行動。每一個幫助和建議表示讚賞。

5

您可以禁用註銷頁面上的後退按鈕。以便用戶在點擊註銷後無法返回。 這個腳本添加到頁面,

<SCRIPT type="text/javascript"> 
    window.history.forward(); 
    function noBack() { window.history.forward(); } 
</SCRIPT> 

而且也是在你的JSP,

<BODY onload="noBack();" 
    onpageshow="if (event.persisted) noBack();" onunload=""> 

另一個建議是不要盲目地將用戶重定向到登錄頁面,如果會話被終止。只需有一個鏈接登錄您的登出頁面

希望這可以幫助!

+0

謝謝.. .. :) – learner

0

試試這個代碼

在您的項目

@WebFilter(servletNames = { "Faces Servlet" }) 
public class NoCacheFilter implements Filter { 

/** 
* doFilter Method. 
* <p> 
* 
* <pre> 
* 
* </pre> 
* 
* </p> 
* @param request 
* @param response 
* @param chain 
* @throws IOException 
* @throws ServletException 
*/ 
@Override 
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, 
     ServletException { 
    HttpServletRequest req = (HttpServletRequest) request; 
    HttpServletResponse res = (HttpServletResponse) response; 

    if (!req.getRequestURI().startsWith(req.getContextPath() + ResourceHandler.RESOURCE_IDENTIFIER)) {                            

     res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); 
     res.setHeader("Pragma", "no-cache"); 
     res.setDateHeader("Expires", 0); 
    } 

    chain.doFilter(request, response); 
} 

/** 
* Initial Method. 
* <p> 
* 
* <pre> 
* 
* </pre> 
* 
* </p> 
* @param filterConfig 
* @throws ServletException 
*/ 
@Override 
public void init(FilterConfig filterConfig) throws ServletException { 
} 

/** 
* Destroy Method. 
* <p> 
* 
* <pre> 
* 
* </pre> 
* 
* </p> 
*/ 
@Override 
public void destroy() { 
} 
} 

https://eclipse.googlesource.com/eclipselink/examples/mysports/+/b37750abf978fc8daee30ef4c214cf88857371b3/admin.web/src/main/java/eclipselink/example/mysports/admin/jsf/NoCacheFilter.java

相關問題