2012-04-16 27 views
1

我正在使用Cookie。當你第一次打開網頁我設置這樣Cookie值不變。每次獲得以前的值

public class SessionTimeoutFilter implements Filter { 

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) 
     throws IOException, ServletException { 

     Object isRegistered = session.getAttribute("logedin"); 
     if (isRegistered != null) { 
      String isRegisteredUser = isRegistered.toString(); 
      if (isRegisteredUser.equalsIgnoreCase(("1"))) { 
       sessionID = UUID.randomUUID().toString();    
       session.setMaxInactiveInterval(240); //4min 
       Cookie userCookie = getCookie(httpServletRequest, "userCookie"); 
       if (userCookie != null) { 

         //Value not setting here 
         Cookie loginUserCookie = new Cookie("userCookie", "loginUser"); 
         httpServletResponse.addCookie(loginUserCookie); 
       } 
       filterChain.doFilter(httpServletRequest, httpServletResponse); 
      } 
     } else { 
      sessionID = httpServletRequest.getRequestedSessionId(); 
      sessionValid = httpServletRequest.isRequestedSessionIdValid(); 

      //User open his browser 
      if (sessionID == null && !sessionValid) { 
       sessionID = UUID.randomUUID().toString(); 
       Cookie browserCookie = new Cookie("browserCookie", sessionID); 
       httpServletResponse.addCookie(browserCookie); 
       Cookie userCookie = new Cookie("userCookie", "normal"); 
       httpServletResponse.addCookie(userCookie); 

       session.setAttribute("logedin", "0"); 
       filterChain.doFilter(httpServletRequest, httpServletResponse); 

      //Session expires. Each time user close the tab and session expires automatically 
      } else if(sessionID != null && !sessionValid) { 
       if (httpServletRequest.isRequestedSessionIdFromCookie()) { 
        Cookie userCookie = getCookie(httpServletRequest, "userCookie"); 
        String value = userCookie.getValue(); 

        //Each time getting normal 
        if (value.equalsIgnoreCase("normal")) { 
         session.setAttribute("logedin", "0"); 
         filterChain.doFilter(httpServletRequest, httpServletResponse); 
        } else if (value.equalsIgnoreCase("loginUser")) { 

        } 
       } //end of if (httpServletRequest.isRequestedSessionIdFromCookie()) 
      } 
     } 
    } //end of dofilter() 
} //end of class SessionTimeoutFilter 

餅乾當你第一次打開頁面,則符合條件if (sessionID == null && !sessionValid)變爲真和userCookie的值設置爲normal.Now如果你關閉瀏覽器選項卡,然後再次打開頁面。 Cookie值正常。好。

但是現在當你登錄時,它的條件是if (isRegisteredUser.equalsIgnoreCase(("1")))。在這裏我試圖取代userCookie值,如

Cookie userCookie = getCookie(httpServletRequest, "userCookie"); 

      if (userCookie != null) { 

       String value = userCookie.getValue(); 

       //delete the cokie 
       //userCookie.setValue("loginUser"); 
       //userCookie.setMaxAge(0); 

       Cookie loginUserCookie = new Cookie("userCookie", "loginUser"); 
       httpServletResponse.addCookie(loginUserCookie); 

      } 

但這兩種方法都不起作用。現在這樣做,如果我關閉瀏覽器,然後重新打開網頁,然後在條件

if (value.equalsIgnoreCase("normal")) { 

    session.setAttribute("logedin", "0"); 
    filterChain.doFilter(httpServletRequest, httpServletResponse); 

} else if (value.equalsIgnoreCase("loginUser")) { 

} 

我正在恢復正常的userCookie value..This時間應該讓我珍惜「loginUser」,因爲我之後已將userCookie的值更改爲loginUser。我在這裏變得很正常。爲什麼我得到了以前的價值。我做錯了什麼?請告訴我。

感謝

回答

4

設置Cookie路徑,解決問題就像

Cookie userCookie = new Cookie("userCookie", "loginUser"); 
userCookie.setPath("/"); 
httpServletResponse.addCookie(userCookie); 

設置Cookie路徑後,值被替換。

謝謝

0

如果一個cookie沒有到期或定義最大年齡 - 它被認爲是一個會話cookie,它會自動在用戶關閉瀏覽器中移除。請參閱http://en.wikipedia.org/wiki/HTTP_cookie#Expires_and_Max-Age

您必須爲您的Cookie設置到期日期。請參閱:http://docs.oracle.com/javaee/1.4/api/javax/servlet/http/Cookie.html#setMaxAge(int)

  Cookie loginUserCookie = new Cookie("userCookie", "loginUser"); 
      loginUserCookie.setMaxAge(3600); // cookie expires in an hour 
      httpServletResponse.addCookie(loginUserCookie); 
+0

好的,這是一個會話級cookie,同意。但是,如果我想更改會話級cookie的值,該怎麼辦?在打開頁面時,我的會話級cookie具有正常值,當用戶登錄時,我想更改會話級cookie的值。當你只是想改變你的cookie的價值時,是否需要設置cookie的到期時間?謝謝 – Basit 2012-04-16 12:22:53

+0

順便說一下,您可以使用任何HTTP流量監視器(例如用於Firefox的FireBug插件)檢查您的應用程序中設置/傳輸了哪些(以及如何)cookie。 – DRCB 2012-04-16 12:24:53

相關問題