您的位置:首页 > 编程语言 > Java开发

java Cookie的增删改查

2016-02-06 22:50 411 查看
package com.test.cookie;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/*
* Cookie的增删改查方法 crud
* 其中:
* 读取Cookie2种方式:
*   1,通过foreach比较找出对应的value;
*   2通过map来取值
*/
public class CookieUtils {
// 增加,支持中文值
//如果直接添加中文,报错// java.lang.IllegalArgumentException: Control character in cookie value or attribute
public static void addCookie(HttpServletResponse response, String name,
String value, int maxAge) {
//对中文进行编码,字母,数字不受影响
String utfvalue = null;
try {
utfvalue = URLEncoder.encode(value.trim(), "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}

Cookie cookie = new Cookie(name.trim(), utfvalue);

// 设置时间,默认Cookie的值只在浏览器的会话期间存在,当用户退出浏览器这些值就消失了!
if (maxAge > 0) {
cookie.setMaxAge(maxAge);// 单位秒
}
// 设置路径,这个路径即该工程下都可以访问该cookie;如果不设置路径,那么只有设置该cookie路径及其子路径可以访问
cookie.setPath("/");
// 添加
response.addCookie(cookie);
//      System.out.println("添加成功!");
}

// 读
// 有2种方式,第一种通过foreach比较找出对应的value,第2种通过map来取值
// 第一种方式,通过name获取cookie对象,进而获取name
public static Cookie getCookie(HttpServletRequest request, String name) {
Map<String, Cookie> map = getCookieMap(request, name);
if (map.containsKey(name)) {
return map.get(name);
}
return null;
}

private static Map<String, Cookie> getCookieMap(HttpServletRequest request,
String name) {
Cookie coos[] = request.getCookies();
Map<String, Cookie> cookieMap = new HashMap<>();
if (coos != null) {
for (Cookie cookie : coos) {
cookieMap.put(cookie.getName(), cookie);
}
}
return cookieMap;
}

// 第二种方式,遍历比较
public static String getCookieValue(HttpServletRequest request, String name) {
Cookie coos[] = request.getCookies();
if (coos != null) {
for (Cookie cookie : coos) {
if (cookie.getName().equals(name)) {
try {
//这里是为了解码出中文,所以用了解码器
return URLDecoder.decode(cookie.getValue(), "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}

}
}
}
return null;
}

// 改,支持中文修改value值
// 修改、删除Cookie时,新建的Cookie除value、maxAge之外的所有属性,例如name、path、domain等,都要与原Cookie完全一样。
// 否则,浏览器将视为两个不同的Cookie不予覆盖,导致修改、删除失败。
//修改实现方式:1,可以自已遍历比较cookie.getName().equals(name),然后自已添加
//            2,判断之后可以调用addCookie方法添加
//这里采用方式1
//设置默认的Cookie时间1天(注意,从Cookie中获取时间是无效的)
public static boolean updateCookie(HttpServletRequest request,HttpServletResponse response, String name, String value) {
return updateCookie(request, response, name, value, 1*24*60*60);
}
//修改Cookie时间
public static boolean updateCookie(HttpServletRequest request,
HttpServletResponse response, String name, String value,int maxAge) {
String utfvalue=null;
try {
//处理中文
utfvalue=URLEncoder.encode(value.trim(), "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
Cookie coos[] = request.getCookies();
boolean flag = false;
if (coos != null) {
for (Cookie cookie : coos) {
if (cookie.getName().equals(name)) {
try {
System.out.println("原值为:" + URLDecoder.decode(cookie.getValue(), "UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
cookie.setValue(utfvalue);
cookie.setPath("/");
cookie.setMaxAge(maxAge);
response.addCookie(cookie);
flag = true;
break;
}
}
if (flag==false) {
System.out.println("没有找到你要修改的Cookie!");
}
}
return flag;
}

// 删
// 方式1:删除进行查找,有的话就删除
public static boolean deleteCookie(HttpServletRequest request,
HttpServletResponse response, String name) {
Cookie coos[] = request.getCookies();
boolean flag = false;
if (coos != null) {
for (Cookie cookie : coos) {
if (cookie.getName().equals(name)) {
//cookie.setValue(null);
//路径要保持一致
cookie.setMaxAge(0);
cookie.setPath("/");
response.addCookie(cookie);
System.out.println("被删除的cookie名字为:"+cookie.getName());
flag=true;
break;
}
}
}
return flag;
}

//方式2:简化版,直接删除,有就删除,没有就没有
public static void deleteCookie1( HttpServletResponse response,String name){
Cookie cookie = new Cookie(name, null);
cookie.setMaxAge(0);
cookie.setPath("/");
response.addCookie(cookie);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: