1.一个cookie只能标识一种信息,它至少含有一个标识信息的的名称(name)和设置值(value)
2.一个WEB站点可以给一个浏览器发送多个Cookie,一个浏览器也可以存储多个WEB站点提供的Cookie
3.cookie的总数量没有限制,但是每个域名的COOKIE的数量和每个COOKIE的大小是有限制的
(不同的浏览器限制不同),Cookie不适合存放数据量大的信息
4.删除cookie时,path必须一致,否则不会删除
5.如果存放中文的cookie,默认报错,可以通过URL编码和解码来解决(不建议存放中文信息)
编码方式
package com.test.cookie;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;
public class EncoderCookie extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.创建一个带中文信息的cookie
//如果直接存放中文cookie,会报错误
//解决方法:将中文 编程成 URL编码 Encoder=编码
//编码后,在保存cooki即可
String company = URLEncoder.encode("张三", "utf-8");
Cookie cookie = new Cookie("name",company);
//2.保存到浏览器
response.addCookie(cookie);
//3.给浏览器返回信息,提示已经成功获取cookie信息
response.setContentType("text/html;charset=utf-8");
PrintWriter writer = response.getWriter();
writer.println("<h1> 设置中文cookie成功 </h1>");
//4.关闭资源
writer.flush();
writer.close();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
解码代码
package com.test.cookie;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;
public class ReadCookie2 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//读取到中文cookie
Cookie[] cookies = request.getCookies();
Cookie companyCookie = CookieUtils.readCookieByName("company", cookies);
String companyVal = companyCookie.getValue();
System.out.println("companyVal=" + companyVal);
//解码
companyVal = URLDecoder.decode(companyVal, "utf-8");
System.out.println("解码后 companyVal=" + companyVal);
//3.给浏览器返回信息,提示已经成功获取cookie信息
response.setContentType("text/html;charset=utf-8");
PrintWriter writer = response.getWriter();
writer.println("<h1> 读取中文cookie成功 </h1>");
//4.关闭资源
writer.flush();
writer.close();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}