私はクッキーを使用しています。あなたが初めてページを開いたとき、私はこのようにクッキーを設定します
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」を取得する必要があります。しかし、私はここで正常になっています。以前の値を取得している理由。私は何を間違っていますか?教えてください。
ありがとう