Java中Cookie常用操作类(Spring中操作Cookie)
说明:Cookie下用Key取值没有快速的方法,只能便利循环去取。
技巧:置0则cookie会立即删除,设置-1,负值则会在关闭浏览器后删除。切记一定要增加路径:setPath("/"),不然不会生效。在获取Cookie时要看下是否设置了域名:setDomain,不然本地调试时获取不到。
Cookie 的限制:
大多数浏览器支持最大为4096字节(4KB)的 Cookie。由于这限制了Cookie的大小,最好用Cookie来存储少量数据,或者存储用户ID之类的标识符。用户ID随后便可用于标识用户,以及从数据库或其他数据源中读取用户信息。 浏览器还限制站点可以在用户计算机上存储的Cookie的数量。大多数浏览器只允许每个站点存储20个Cookie;如果试图存储更多Cookie,则最旧的Cookie便会被丢弃。有些浏览器还会对它们将接受的来自所有站点的Cookie总数作出绝对限制,通常为300个。
import java.util.HashMap; import java.util.Map; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class CookieTool { /** * 添加cookie * * @param response * @param name Key * @param value Value * @param maxAge 有效时间 */ public static void addCookie(HttpServletResponse response, String name, String value, int maxAge) { Cookie cookie = new Cookie(name, value); cookie.setPath("/"); cookie.setMaxAge(maxAge); cookie.setDomain(".jsoft.me"); // cookie作用域 response.addCookie(cookie); } /** * 检索所有Cookie封装到Map集合 * * @param request * @return */ public static Map<String, String> readCookieMap(HttpServletRequest request) { Map<String, String> cookieMap = new HashMap<String, String>(); Cookie[] cookies = request.getCookies(); if (null != cookies) { for (Cookie cookie : cookies) { cookieMap.put(cookie.getName(), cookie.getValue()); } } return cookieMap; } /** * 通过Key获取Value * * @param request * @param name Key * @return Value */ public static String getCookieValueByName(HttpServletRequest request, String name) { Map<String, String> cookieMap = readCookieMap(request); if (cookieMap.containsKey(name)) { String cookieValue = (String) cookieMap.get(name); return cookieValue; } else { return null; } } }
在Spring MVC的Controller中使用:
在Spring MVC中使用CookieValue注解映射请求参数,@CookieValue有三个属性,分别如下:
- value请求参数的参数名;
- required该参数是否必填,默认为true(必填),当设置成必填时,如果没有传入参数,报错;
- defaultValue 设置请求参数的默认值;
参考:
http://www.cnblogs.com/jun-ma/p/5679459.html
http://blog.csdn.net/u011848397/article/details/52201339
http://www.ibloger.net/article/33.html(以上内容转自此篇文章)