5
回答
关于Java中cookie删除的问题
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

        今天做毕设的时候,出现了一个极其诡异的问题。

         当我填写登录表单完成提交后,后端判定数据合法性然后将用户信息写入Cookie并redirect,之后cookie写入成功,页面显示登录用户名。在我点击注销按钮之后,后端删除cookie,然后跳转到首页,首页显示登录按钮,说明cookie已经不存在了,但是我地址栏输入登录表单的URL之后发现,登录表单上面竟然还显示用户名。

         我用chrome的console输入document.cookie发现存在JSESSIONID和__user__,__user__就是我存放在cookie中的用户名。然后地址栏输入首页的URL,console发现cookie中又只有JSESSIONID,说明这个地方的cookie已经不存在了。

         附上操作cookie的源码:

     

package com.beauty.web.util;
import java.util.Map;
import java.util.HashMap;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Cookies {
	/**
	 * 添加一个cookie
	 * @param res
	 * @param name
	 * @param value
	 * @param maxAge
	 */
	public static void add(HttpServletResponse res,String name,String value,int maxAge) {
		Cookie cookie = new Cookie(name,value);
		if(maxAge > 0) {
			cookie.setMaxAge(maxAge);
		}
		cookie.setPath("/");
		res.addCookie(cookie);
	}
	public static void add(HttpServletResponse res,String name,String value) {
		add(res,name,value,3600*7);
	}
	/**
	 * 获取cookie的值
	 * @param req
	 * @param name
	 * @return
	 */
	public static String getName(HttpServletRequest req,String name) {
		Cookie cookie = get(req,name);
		String cookieVal = (null == cookie) ? null : cookie.getValue();
		return cookieVal;
	}
	public static Cookie get(HttpServletRequest req,String name) {
		Map<String,Cookie> cookieMap = _readCookieMap(req);
		if(cookieMap.containsKey(name)) {
			return (Cookie)cookieMap.get(name);
		} else {
			return null;
		}
	}
	/**
	 * 清除cookie
	 * @param req
	 * @param res
	 * @param name
	 */
	public static void remove(HttpServletRequest req,HttpServletResponse res,String name) {
		String cookieName = getName(req,name);
		if(null != cookieName) {
			Cookie cookie = new Cookie(cookieName,null);
			cookie.setMaxAge(0);
			cookie.setPath("/");
			res.addCookie(cookie);
		}
	}
	/**
	 * 清除所有cookie
	 * @param req
	 * @param res
	 */
	public static void clear(HttpServletRequest req,HttpServletResponse res) {
		Cookie[] cookies = req.getCookies();
		for(int i = 0,len = cookies.length; i < len; i++) {
			Cookie cookie = new Cookie(cookies[i].getName(),null);
			cookie.setMaxAge(0);
			cookie.setPath("/");
			res.addCookie(cookie);
		}
	}
	private static Map<String,Cookie> _readCookieMap(HttpServletRequest req) {
		Map<String,Cookie> cookieMap = new HashMap<String,Cookie>();
		Cookie[] cookies = req.getCookies();
		if(null != cookies) {
			for(Cookie cookie : cookies) {
				cookieMap.put(cookie.getName(),cookie);
			}
		}
		return cookieMap;
	}
}

  

举报
阳光test
发帖于5年前 5回/10K+阅
共有5个答案 最后回答: 5年前
cookie上加上域名 还有域名必须加一个点  .domain.com  
--- 共有 1 条评论 ---
阳光testcookie上面假设加上域名了,怎么解决如localhost这种呢? 刚才把setDomain也弄上了,还是有问题啊 5年前 回复

引用来自“lavafree”的答案

cookie上加上域名 还有域名必须加一个点  .domain.com  
public static void removeCookie(String cookieName,String path,String domain,
HttpServletRequest httpRequest, HttpServletResponse httpResponse) {
Cookie cookie = getCookie(cookieName, httpRequest);
if (cookie != null) {
cookie.setValue(null);
cookie.setPath(path);
cookie.setDomain(domain);
cookie.setMaxAge(0);
addCookie(cookie, httpResponse);
}

}

删除的时候把域名也加上

至于你说的localhost的问题有几个方式

自动获取当前域名,比如localhost,那么域名就是localhost,其他的获取主域名。

第二种方式就是hosts修改为你想要的域名

引用来自“明庭令”的答案

已解决,原来是我自己写错了一点东西。
请问下你写错了什么呢??我也出了同样的错。。
顶部