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
.