2017-08-15 58 views
1

對於我們有登錄頁面的實例。我們正在創建會話並追加我們的文本。我正在嘗試比較舊會話和新會話。讓我們把,比較新舊會話

1)用戶登錄與測試//如果密碼不正確,它會回重定向到登錄頁面和「測試」追加到會話

2)但是,如果用戶登錄與第二次嘗試不同的用戶名//我想將它附加到新的會話並與舊的會話進行比較。 比方說,,

if(session1 is not equal to session 2){ 
    restart attempt incremental 
} else if (session1 is to session 1){ 
    increment attempt to -1 
} 

讓我們把這種 我們的JSP文件中遵循

<form action="servlet" method="post"> 
<input type="text" name="username"> 
</form> 

在我們的servlet文件

doPost(HttpSe....){ 
//Get Parameter 
String name = request.getParameter("username"); 

//Create session 
HttpSession session = request.getSession(true); 
session.setAttribute("username", name); 
String session_name = (String)session.getParameter("username"); 

//validate if username is = test, it will redirect 

if(name.equal("test")){ 
    //this will redirect to different page 
} else if(session_name.equals(name)){ 
    //do something.. 
} else { 
//do something... 
} 

我只是需要比較舊的會話和新的會話。

我嘗試使用(session.isNew()),但它不工作,它總是會重定向我else語句..

這是我的實際代碼

HttpSession session = request.getSession(true); 
     HttpSession session_Newusername = request.getSession(true); 
     session.setAttribute("Username", username); 
     String session_Username = (String)session.getAttribute("Username"); 
     System.out.println(" data .... " + session_Username); 

     int loginAttempt; 
      if(session.getAttribute("loginCount") == null){ 
       session.setAttribute("loginCount", 0); 
       loginAttempt = 0; 
      } else if(session.isNew()) { 
       System.out.println("If user key in same username"); 
       loginAttempt = (Integer)session.getAttribute("loginCount"); 
       if(loginAttempt == 3){ 
        session.setMaxInactiveInterval(5); 
        session.setAttribute("message", "Your account is blocked, Please contact admin or wait for 2mins"); 
        //System.out.println(session.getAttribute("message")); 
        response.sendRedirect("Pages/Login/login.jsp"); 
       } else { 
        System.out.println("How many attempt left " + loginAttempt); 
        loginAttempt++; 
        int leftAttempt = 4 - loginAttempt; 
        session.setAttribute("message", "You are left with " + leftAttempt + " attempt"); 
        //System.out.println(session.getAttribute("message")); 
        response.sendRedirect("Pages/Login/login.jsp"); 
       } 
       session.setAttribute("loginCount", loginAttempt); 
      } else { 
       response.sendRedirect("Pages/Login/login.jsp"); 
       System.out.println("username is not the same"); 
       session.invalidate(); 
      } 

    } 
+0

所以你有什麼問題嗎? –

+0

我想將新值存儲在新會話中,並將其與新會話中的舊值進行比較 –

+0

交換值,以便您可以輕鬆存儲新值並與其他值進行比較。 – Tehmina

回答

0

當前一交易日爲無效(例如超時後關閉)會話屬性將被銷燬。所以你不能添加這些屬性,並嘗試從之前已經失效的會話中獲取它。您只能在相同的活動會話中訪問它們。

所以,你不能以這種方式達到你想要的。您需要將數據存儲在其他位置,例如在數據庫或JVM內存中。但不在會話屬性中。

如果你想確定在同一個活動會話,那麼你需要檢查在當前會話userName屬性的存在,然後你想要的行爲:

userName = (String) session.getAttribute("userName"); 
if (userName == null) { 
    // here you don't have it from previous invocation of setAttribute 
    session.setAttribute("userName", login); 
} else { 
    // you already setAttribute from previous invocation on current session 
    // add you errors here 
}