Cookie对象的特点
Cookie使用字符串存储数据
Cookie使用Key与Value结构存储数据
单个Cookie存储数据大小限制在4097个字节
Cookie存储的数据中不支持中文,Servlet4.0之后支持
Cookie是与域名绑定所以不支持跨一级域名访问
Cookie对象保存在客户端浏览器内存或系统磁盘中
Cookie分为持久化Cooke与状态Cookie
浏览器在保存同一域名所返回Cookie的数量是有限的。不同浏览器支持的数量不同,Chrome浏览器为50个
浏览器每次请求时都会把与当前访问的域名相关的Cookie在请求中提交到服务端。
Cookie对象的创建
Cookie cookie = new Cookie("key","value")(服务端创建)
通过new关键字创建Cookie对象
response.addCookie(cookie)
通过HttpServletResponse对象将Cookie写回给客户端浏览器。
获取Cookie中的数据
浏览器每次请求时都会把与当前访问的域名相关的Cookie在请求中提交到服务端。通过HttpServletRequest对象获取Cookie,返回Cookie数组。
Cookie[] cookies = request.getCookies()
//获取每一个cookie对象和对应的数据
For(int i=0;i<cookies.length;i++){
Cookie cookie = cookies[i]
String name = cookie.getName();
String value = cookie.getValue();
}
解决Cookie不支持中文(servlet4.0之前)
在Cookie中name的值不能使用中文,Value是可以的。但是在Servlet4.0版本之前Cookie中的Value也是不支持中文存储的,如果存储的数据中含有中文,代码会直接出现异常。我们可以通过对含有中文的数据重新进行编码来解决该问题。在Servlet4.0中的Cookie的Value开始支持中文存储。
java.lang.IllegalArgumentException: Control character in cookie value or attribute.
URLEncoder.encode("content","code")
将内容按照指定的编码方式做URL编码处理。(在服务端创建的时候)
URLDecoder.decode("content","code")
将内容按照指定的编码方式做URL解码处理。(响应给客户端的时候)