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); } }
相关文章推荐
- Spring Boot、Mybatis框架整合开发Java RESTful Web Service
- 在 java web 中调用存储过程
- Java自定义注解的语法要求
- 搭建基于qemu + eclipse的kernel调试环境(by quqi99)
- Java-集合框架Collection之Set(一)
- <Java设计模式>—抽象工厂模式
- Java序列求和
- java.io.FileNotFoundException: class path resource [XXXXX.xml] cannot be opened
- Java求圆面积
- eclipse 看*.vm 文件 里面的coding都是黑色
- 菜鸟读JAVA²核心技术卷Ⅱ:高级特性(原书第7版)- 线程
- Struts学习的总结
- JAVA中的接口和抽象类
- JAVA中的接口和抽象类
- jdk小知识
- eclipse错误:Syntax error , 'for each' statements are only available if source level is 1.5
- Java [Leetcode 234]Palindrome Linked List
- JAVA多线程下载
- 蓝桥杯 基础练习 十六进制转十进制 java
- java JDK8 学习笔记——第13章 时间与日期