2012-04-24 63 views
0

嗨,我正在開發使用struts和jsp的應用程序。在jsp中我們使用Ajax調用,會話超時後,我們正在重定向到登錄頁面。但問題是登錄頁面顯示相同的div標籤。我在會話中檢查用戶是否在jsp的javascript中,但總是會話具有userid值,如果會話過期,則它永遠不會爲空。如何在jsp會話超時後重定向到登錄頁面?

回答

3

兩件事情

  1. 在web.xml
  2. 配置一個歡迎頁面,登錄頁面創建一個過濾器,在web.xml配置,這應該是第一個在web.xml
  3. 在過濾器檢查過濾器,如果會話是新的用戶應被引導到登錄頁面,否則應該將請求處理。
+0

您好abhi,我的問題是它重定向登錄頁面,但登錄頁面顯示在相同的jsp rquested ajax DIV標籤。 – 2012-04-24 08:45:17

+0

嗨哈里,當你擊中任何jsp/servlet時,在那裏使用重定向,試一下如果可行的話! – abhi 2012-04-24 10:52:05

0

每一次新的請求到來時,你應該檢查,並在服務器端驗證會話。 此超時由Web服務器處理。一旦發生超時,服務器自動將用戶重定向到session logout URL。您可以在服務器的conf文件中更改此配置。

欲瞭解更多信息請參閱this

+0

喜。實際上在web.xml中,我將會話超時設置爲5分鐘,當用戶以語法方式登錄時,我將會話超時更改爲9分鐘。我的問題是,當會話過期時,我可以重定向到登錄頁面。但它是jsp中的ajax請求,所以登錄頁面在同一個jsp的side div標記中呈現。 – 2012-04-24 06:55:45

0

爲了處理會話超時/過期的AJAX調用請求,並派遣其到登錄頁面的步驟如下。

1)在你的JSP無論AJAX功能都寫你的Ajax發送請求之前,設置一個頭。

req.open("POST", Servlet_PATH, true); 
req.setRequestHeader("X-Requested-With", "XMLHttpRequest"); //set header 
req.send(); 

2)在過濾器中獲得的標題像這樣,如果會話是空發送作爲響應錯誤

httpRequest.getHeader("X-Requested-With"); 
    if (session == null) { 
`if(httpRequest.getHeader("X-Requested-With")!=null && httpRequest.getHeader("X-Requested-With").equals("XMLHttpRequest")){` 
     `logger.info("Ajax Expired...");` 
          `((HttpServletResponse)response).sendError(403);` // Response error set 
          `return;` 
         `}}` 

3)在JSP徘徊無論AJAX代碼被寫入校驗request.readystate和請求。國家這樣

if (req.readyState==4 && req.status==200) 
     { 
//your logic 
} 
else if(req.readyState==4 && req.status==403){ 

      alert("Your Session is Expired.Please Relogin."); 
      window.location.href = "<%=request.getContextPath()%>/jsp/login.jsp"; 
     } 
相關問題