2012-03-22 7 views
21

스프링 MVC의 HttpServletResponse에있는 쿠키를 삭제하는 방법을 알고 싶습니다. 쿠키를 만들고 쿠키를 삭제할 로그인 방법이 있지만 작동하지 않습니다. 여기 서블릿 응답에서 쿠키 삭제

코드입니다 :

@RequestMapping(method = RequestMethod.POST) 
public ModelAndView Login(HttpServletResponse response, String user, String pass) {  
    if (user != null && pass != null && userMapper.Users.get(user).getPass().equals(pass)){ 
     Cookie cookie = new Cookie("user", user); 
     cookie.setPath("/MyApplication"); 
     cookie.setHttpOnly(true); 
     cookie.setMaxAge(3600); 
     response.addCookie(cookie); 
     Map model = new HashMap(); 
     model.put("user", user); 
     return new ModelAndView("home", "model", model); 
    } 
    return new ModelAndView("login"); 
} 

@RequestMapping(value="/logout", method = RequestMethod.POST) 
public ModelAndView Logout(HttpServletRequest request, HttpServletResponse response) {  

     Cookie[] cookies = request.getCookies(); 
     for(int i = 0; i< cookies.length ; ++i){ 
      if(cookies[i].getName().equals("user")){ 
       //Cookie cookie = new Cookie("user", cookies[i].getValue()); 
       //cookie.setMaxAge(0); 
       //response.addCookie(cookie); 
       cookies[i].setMaxAge(0); 
       response.addCookie(cookies[i]); 
       break; 
      } 
     } 
     return new ModelAndView("login"); 
} 

내가에만 maxAge을 변경할 필요하다고 생각하지만 브라우저에서 쿠키가 변경되지 않습니다. 나는 주석 처리 된 블록에서 같은 이름의 쿠키를 재 작성하려고 시도했으나 작동하지 않습니다.

+0

시도해 보았습니다. cookie.setvalue ("") ?? –

+0

가능한 [Java 서블릿에서 쿠키를 제거하는 방법] 복제본 (http://stackoverflow.com/questions/890935/how-do-you-remove-a-cookie-in-a-java-servlet) – skaffman

+0

예, setValue ("")가 작동하지 않았습니다 ... – Cruz

답변

60

최대 허용 연령을 0으로 설정하는 것이 옳습니다. 값이 아닌 다른 쿠키 속성은 이고 정확히이어야합니다. 따라서 정확하게 동일한 도메인, 경로, 보안 등. 값은 선택 사항이며 null으로 설정하는 것이 가장 좋습니다.

그래서, 당신이 다음과 같이 제거해야

Cookie cookie = new Cookie("user", user); 
cookie.setPath("/MyApplication"); 
cookie.setHttpOnly(true); 
cookie.setMaxAge(3600); 
response.addCookie(cookie); 

쿠키, 생성 방법 방법 제공 : 말했다

Cookie cookie = new Cookie("user", null); // Not necessary, but saves bandwidth. 
cookie.setPath("/MyApplication"); 
cookie.setHttpOnly(true); 
cookie.setMaxAge(0); // Don't set to -1 or it will become a session cookie! 
response.addCookie(cookie); 

, 나는 가게에 유용하는 방법을 모르겠어요를 로그인 한 사용자를 쿠키로 표시합니다. 기본적으로 최종 사용자가 그 값을 조작 할 수있게합니다. 대신 세션 속성으로 저장하고 로그 아웃시 session.invalidate()으로 전화하십시오.

+0

고마워, 그게 다야, 지금부터는이 프레임 워크와 함께 일할 것이고, 어떻게 작동하는지 배우는 중이다. 쿠키를 사용하는 것을 이해하려고 노력했기 때문에 사용자를 통해 로그인을 한 것이다. – Cruz

+0

"로그인 한 사용자를 쿠키로 저장하는 것이 얼마나 유용한 지 잘 모르겠습니다." 싱글 사인온 (SSO) 시스템에 연결되어 있고 기탁 된 쿠키를 통해 사용자를 영구적으로 '로그 아웃'해야하는 경우 관련성이 있습니다. – carlosayam

+0

경로 값입니다. "/ mywebapp"경로로 쿠키를 설정하고 나중에 "/"루트 경로로 삭제하려고했습니다. 작동하지 않지만 정확한 값을 사용해야했습니다. cookie.setPath ("/ mywebapp"), cookie.setMaxAge (0), cookie.setValue (null), response.addCookie (cookie) – Whome

-1

자신의 코드를 사용할 필요가 없습니다. rememberMe 옵션을 사용하여 로그인하는 동안 쿠키를 생성하는 rememberMeServices 빈을 구성하면 로그 아웃 후에 삭제됩니다.