【问题标题】:Cookie value is not changing. Each time getting the previous valueCookie 值不变。每次获取上一个值
【发布时间】:2012-04-27 18:18:47
【问题描述】:

我正在使用 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) 变为 true,并且 userCookie 设置为正常值。现在如果您关闭浏览器选项卡,然后再次打开页面。 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 值,我再次变得正常。这次它应该让我获得值“loginUser”,因为我已将 userCookie 的值更改为 loginUser。但是我在这里变得正常了。为什么我得到以前的值。我做错了什么?请告诉我。

谢谢

【问题讨论】:

    标签: jakarta-ee jsf-2


    【解决方案1】:

    设置cookie路径,解决喜欢的问题

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

    设置cookie路径后,值被替换。

    谢谢

    【讨论】:

      【解决方案2】:

      如果您的 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);
      

      【讨论】:

      • 好的,这是一个会话级别的 cookie,同意。但是,如果我想更改会话级 cookie 的值怎么办。在页面打开时,我的会话级别 cookie 的值正常,当用户登录时,我想更改会话级别 cookie 的值。当您只想更改 cookie 的值时,是否需要设置 cookie 的到期时间?谢谢
      • 顺便说一句,您可以使用任何 HTTP 流量监视器(例如 Firefox 的 FireBug 插件)来检查您的应用程序中设置/传输了哪些(以及如何准确地)cookie。
      猜你喜欢
      • 1970-01-01
      • 2014-02-08
      • 1970-01-01
      • 2015-09-07
      • 2020-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多