[java] Java 서블릿에서 쿠키를 제거하는 방법

Java 서블릿에서 쿠키를 어떻게 제거합니까?

나는 이것을 시도했다 :
http://www.jguru.com/faq/view.jsp?EID=42225

편집 : 이제 다음이 성공적으로 작동합니다.

response.setContentType("text/html");

cookie.setMaxAge(0);

내가하기 전에 :

//remove single signon cookie if it hasn't been validated yet
response.setContentType("text/html");
Cookie cookie = new Cookie(SSORealm.SSO_COOKIE_NAME, "");
cookie.setDomain(SSORealm.SSO_DOMAIN);
cookie.setMaxAge(-1);
cookie.setPath("/");
cookie.setComment("EXPIRING COOKIE at " + System.currentTimeMillis());
response.addCookie(cookie);

문서에 따라 브라우저가 닫히면 쿠키가 만료됩니다 .

음수 값은 쿠키가 지속적으로 저장되지 않으며 웹 브라우저가 종료 될 때 삭제됨을 의미합니다. 값이 0이면 쿠키가 삭제됩니다.

쿠키를 만료하는 전체 작업 스 니펫은 다음과 같습니다.

//remove single signon cookie if it hasn't been validated yet
response.setContentType("text/html");
Cookie cookie = new Cookie(SSORealm.SSO_COOKIE_NAME, "");
cookie.setDomain(SSORealm.SSO_DOMAIN);
cookie.setMaxAge(0);
cookie.setPath("/");
cookie.setComment("EXPIRING COOKIE at " + System.currentTimeMillis());
response.addCookie(cookie);



답변

-1의 MaxAge는 세션이 지속되는 동안 쿠키가 유지되기를 원한다는 신호입니다. MaxAge를 0으로 설정하려고합니다.

로부터 API 문서 :

음수 값은 쿠키가 지속적으로 저장되지 않으며 웹 브라우저가 종료 될 때 삭제됨을 의미합니다. 값이 0이면 쿠키가 삭제됩니다.


답변

내 환경에서 다음 코드가 작동합니다. 외모가 먼저 눈에 중복,하지만 cookies[i].setValue("");cookies[i].setPath("/");필요 제대로 쿠키를 지 웁니다.

private void eraseCookie(HttpServletRequest req, HttpServletResponse resp) {
    Cookie[] cookies = req.getCookies();
    if (cookies != null)
        for (Cookie cookie : cookies) {
            cookie.setValue("");
            cookie.setPath("/");
            cookie.setMaxAge(0);
            resp.addCookie(cookie);
        }
}


답변

쿠키는 실제로 이름, 경로 및 도메인의 튜플에 의해 정의됩니다. 이 세 가지 중 하나가 다르거 나 동일한 이름의 쿠키가 둘 이상 있지만 해당 URL에 여전히 표시 될 수있는 경로 / 도메인으로 정의 된 경우에도 쿠키가 요청에 전달 된 것을 볼 수 있습니다. 예를 들어, URL이 ” http://foo.bar.com/baz/index.html “인 경우 bar.com 또는 foo.bar.com에 정의 된 쿠키 또는 “/”경로 또는 “/ baz”.

따라서 이름이 “SSO_COOKIE_NAME”, 도메인 “SSO_DOMAIN”및 경로 “/”인 클라이언트에 쿠키가 하나만 정의되어 있으면 작동하는 것처럼 보입니다. 경로 나 도메인이 다른 쿠키가있는 경우 여전히 쿠키가 클라이언트로 전송 된 것을 볼 수 있습니다.

이를 디버깅하려면 Firefox의 환경 설정-> 보안 탭으로 이동하여 SSO_COOKIE_NAME을 사용하여 모든 쿠키를 검색하십시오. 도메인과 경로를 보려면 각각을 클릭하십시오. 나는 당신이 거기에서 당신이 기대하는 것이 아닌 것을 찾을 것이라고 확신합니다.


답변

Cookie[] cookies = request.getCookies();
if(cookies!=null)
for (int i = 0; i < cookies.length; i++) {
 cookies[i].setMaxAge(0);
}

작동하지 않습니까? 응답이 다시 전송되면 모든 쿠키가 제거됩니다.


답변

이것은 "/"strPath 매개 변수로 전달 하여 이전에 효과적으로 사용한 코드입니다 .

public static Cookie eraseCookie(String strCookieName, String strPath) {
    Cookie cookie = new Cookie(strCookieName, "");
    cookie.setMaxAge(0);
    cookie.setPath(strPath);

    return cookie;
}


답변

하나의 특별한 경우 : 쿠키에는 경로가 없습니다.

이 경우 경로를 cookie.setPath(request.getRequestURI())

자바 스크립트는 경로없이 쿠키를 설정하므로 브라우저는 현재 페이지의 쿠키로만 쿠키를 표시합니다. path == /브라우저 와 함께 만료 된 쿠키를 보내려고하면 하나의 쿠키가 만료 path == /되고 다른 쿠키는 쿠키가 표시 됩니다 path == current page.


답변