Spring MVCでHttpServletResponse
のCookieを削除する方法を知りたいです。 Cookieを作成するログインメソッドと、それを削除するログアウトがありますが、機能しません。
コードは次のとおりです。
@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
を変更するだけでよいと思いましたが、ブラウザではCookieは変更されません。コメント付きブロック内で同じ名前のCookieを書き換えようとしましたが、機能しません。
最大年齢を_0
_に設定するのが適切です。ただし、値以外はexactlyと同じ他のCookieプロパティが必要です。したがって、まったく同じドメイン、パス、セキュアなど。値はオプションであり、null
に設定するのが最適です。
したがって、Cookieの作成方法を考えると、
_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);
_
そうは言っても、ログインしたユーザーをCookieとして保存することがどのように役立つかはわかりません。また、基本的にエンドユーザーがその値を操作できるようにします。代わりにセッション属性として保存し、ログアウト時にsession.invalidate()
を呼び出します。