1

私はクッキーを使用しています。あなたが初めてページを開いたとき、私はこのようにクッキーを設定します

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 が通常の値に設定されます。ブラウザのタブを閉じると、再度ページが開きます。クッキーの値は正常です。わかった。

しかし、ログインすると、状態になります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 値として再び正常になっています。今回は、userCookie の値を loginUser に変更したため、値「loginUser」を取得する必要があります。しかし、私はここで正常になっています。以前の値を取得している理由。私は何を間違っていますか?教えてください。

ありがとう

4

2 に答える 2

4

Cookieパスを設定し、次のような問題を解決します

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

Cookie パスを設定した後、値が置き換えられます。

ありがとう

于 2012-05-17T09:07:01.090 に答える
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);
于 2012-04-16T12:17:58.917 に答える