2014-05-12 27 views
1

我寫了這個代碼註銷的servlet,但是當我點擊後退按鈕一切工作fine.Kindly建議註銷Servlet的不正常

public class LogOut extends HttpServlet { 


    private static final long serialVersionUID = 1L; 

public void doGet(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException { 
PrintWriter out = response.getWriter(); 
HttpSession session = request.getSession(true); 
System.out.println("logging out"); 

HttpSession session1=request.getSession(); 

session1.invalidate(); 

out.print("You are successfully logged out!"); 
RequestDispatcher rd= request.getRequestDispatcher("/Logout.jsp"); 
rd.forward(request, response); 

out.close(); 


} 
} 
+1

該會話與瀏覽器緩存無關。您需要禁用緩存才能使按鈕行爲發生更改。 –

回答

0
Session invalidation is enough for a perfect logout servlet.In order to made logout working properly we want to add a concept of validating authentication. 

HttpSession的會議= request.getSession(真);

session.invalidate();

創建login.that包括ID,username..etc.Then檢查的驗證對象每次用戶是 authObj ATH內servlet.After每個操作的開始會話失效 如果你嘗試做任何操作,你不會因爲我們沒有用戶名 (作爲一個例如:),我們已經保存在會話中。用戶名不可用的原因是我們已經完成了會話失效。所以我們不能進行任何操作我們需要登錄。然後只需添加如下消息:

PrintWriter out = response.getWriter();

out.println(「SESSION FAILED!」);

0

雖然這樣做(用戶可以禁用不完美的方式javascript),我們可以使用history.forward()方法強制用戶跳回到下一頁。但是,由於瀏覽器不調用在onload方法每次還有其他問題,也我們要修改我們的代碼

<html> 
    <head> 
    <title>Page One</title> 
    <script> 
    function backButtonOverride() 
    { 
     setTimeout("backButtonOverrideBody()", 1); 
    } 

    function backButtonOverrideBody() 
    { 

     try { 
     history.forward(); 
     } catch (e) { 

     } 

     setTimeout("backButtonOverrideBody()", 500); 
    } 
    </script> 
    </head> 
    <body onLoad="backButtonOverride()"> 
    <h1>Page One</h1> 
    <a href="page2.html">Move to Page Two</a> 
    </body> 
    </html> 

我會建議,而不是在頁面之前的執行這段代碼註銷頁面實現這個代碼註銷頁面本身,並添加JavaScript代碼從登出頁面用戶重定向到「登錄頁」只是使用增加安全性: -

window.location = url; 
0

在logut的servelt

你需要做適當的這樣的

response.addHeader("Cache-Control", "no-cache,no-store,private,must-revalidate,max-stale=0,post-check=0,pre-check=0"); 
response.addHeader("Pragma", "no-cache"); 
response.addDateHeader ("Expires", 0); 

如果您正在使用Cookie,然後你需要清除它們太

/** 
     * Invalidate all cookies by, for each cookie received, 
     * overwriting value and instructing browser to deletes it 
     */ 
     Cookie[] cookies = request.getCookies(); 
     if (cookies != null && cookies.length > 0) { 
      for (Cookie cookie : cookies) { 
       cookie.setValue("-"); 
       cookie.setMaxAge(0); 
       response.addCookie(cookie); 
      } 
     } 

在你Logout.jsp您在頭標記加入這些

<head> 
<meta http-equiv="Cache-Control" content="no-cache,no-store,private,must-revalidate,max-stale=0,post-check=0,pre-check=0" /> 
<meta http-equiv="Pragma" content="no-cache" /> 
<meta http-equiv="Expires" content="0" /> 
</head>