Servlets 从servlet响应中删除cookie

Servlets 从servlet响应中删除cookie,servlets,cookies,spring-mvc,Servlets,Cookies,Spring Mvc,我想知道如何在SpringMVC中删除HttpServletResponse中的cookie。我有一个登录方法,我在其中创建cookie,并在其中注销,我想删除它,但它不起作用 代码如下: @RequestMapping(method = RequestMethod.POST) public ModelAndView Login(HttpServletResponse response, String user, String pass) { if (user != null

我想知道如何在SpringMVC中删除
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");
 }
@RequestMapping(method=RequestMethod.POST)
公共模型和视图登录(HttpServletResponse,字符串用户,字符串传递){
if(user!=null&&pass!=null&&userMapper.Users.get(user.getPass().equals(pass)){
Cookie Cookie=新Cookie(“用户”,用户);
cookie.setPath(“/MyApplication”);
cookie.setHttpOnly(true);
cookie.setMaxAge(3600);
addCookie(cookie);
映射模型=新的HashMap();
model.put(“用户”,user);
返回新模型和视图(“主页”、“模型”、“模型”);
}
返回新的ModelAndView(“登录”);
}
@RequestMapping(value=“/logout”,method=RequestMethod.POST)
公共模型和视图注销(HttpServletRequest请求,HttpServletResponse响应){
Cookie[]cookies=request.getCookies();
对于(int i=0;i

我以为只需要更改
maxAge
,但在浏览器中cookie不会更改。我甚至尝试在注释块中重写同名cookie,但也不起作用。

将最大年龄设置为
0
是正确的。但除了值之外,它必须具有与其他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()

无需使用自己的代码。只需配置rememberMeServices bean,该bean将在用户登录时创建cookie,并选中rememberMe选项,然后在注销后将其删除。

您是否尝试过cookie.setvalue(“”)?可能重复的是,setvalue(“”)也不起作用…带有
new cookie()
的注释代码应该起作用,除了设置相同的cookie域之外。谢谢,就是这样,从现在起我将使用这个框架,我正在学习它的工作原理,我正在尝试了解如何使用cookie,这就是我通过用户登录的原因。“我不确定将登录的用户存储为cookie有何用处。”如果您也链接到单一登录系统,并且需要通过其存放的cookie永久“注销”用户,则可能相关。路径值就是它。我使用“/mywebapp”路径设置cookie,后来尝试使用“/”根路径删除它。它不起作用,但必须使用准确的值cookie.setPath(“/mywebapp”)、cookie.setMaxAge(0)、cookie.setValue(null)、response.addCookie(cookie)也可以与会话cookie一起使用?最初存储的那些没有最大年龄?或者它们的过期时间仅由浏览器控制?