Jakarta ee Cookie值未更改。每次获取上一个值时

Jakarta ee Cookie值未更改。每次获取上一个值时,jakarta-ee,jsf-2,Jakarta Ee,Jsf 2,我在用饼干。当你第一次打开页面时,我将cookie设置为这样 public class SessionTimeoutFilter implements Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { Object i

我在用饼干。当你第一次打开页面时,我将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设置为value normal。现在,如果关闭浏览器选项卡,则再次打开页面。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。但我在这里变得正常了。为什么我会得到上一个值。我做错了什么?请告诉我


如果您没有定义cookie的有效期或最长使用期限,则表示感谢,因为它被视为会话cookie,当用户关闭浏览器时会自动删除。看

你必须为你的饼干设定一个有效期。见:


如果您未定义cookie的有效期或最长期限,则该cookie将被视为会话cookie,当用户关闭浏览器时,该cookie将自动删除。看

你必须为你的饼干设定一个有效期。见:


设置cookie路径,解决如下问题

Cookie userCookie = new Cookie("userCookie", "loginUser");
userCookie.setPath("/");
httpServletResponse.addCookie(userCookie);
设置cookie路径后,值被替换


谢谢

设置cookie路径,解决以下问题

Cookie userCookie = new Cookie("userCookie", "loginUser");
userCookie.setPath("/");
httpServletResponse.addCookie(userCookie);
设置cookie路径后,值被替换


谢谢

好的,这是会话级cookie,同意。但是,如果我想更改会话级别cookie的值,该怎么办。在“打开”页面上,我的会话级别cookie的值为“正常”,当用户登录时,我想更改会话级别cookie的值。当您只想更改cookie的值时,是否需要设置cookie的过期时间?谢谢。顺便说一下,您可以使用任何HTTP流量监视器(例如Firefox的FireBug插件)来检查在您的应用程序中设置/传输了哪些(以及如何准确地设置/传输)cookie。好的,这是会话级cookie,同意。但是,如果我想更改会话级别cookie的值,该怎么办。在“打开”页面上,我的会话级别cookie的值为“正常”,当用户登录时,我想更改会话级别cookie的值。当您只想更改cookie的值时,是否需要设置cookie的过期时间?顺便说一句,您可以使用任何HTTP流量监视器(例如Firefox的FireBug插件)来检查在您的应用程序中设置/传输了哪些(以及如何准确地设置/传输)cookie。