(17)会话之Cookie的使用详解
Cooke技术
1,特点
Cookie技术:会话数据保存在浏览器客户端。
2,Cookie技术核心
Cookie类:用于存储会话数据
1)构造Cookie对象
Cookie(java.lang.String name, java.lang.String value)
2)设置cookie
void setPath(java.lang.String uri) :设置cookie的有效访问路径
void setMaxAge(int expiry) : 设置cookie的有效时间
void setValue(java.lang.String newValue) :设置cookie的值
3)发送cookie到浏览器端保存
void response.addCookie(Cookie cookie) : 发送cookie
4)服务器接收cookie
Cookie[] request.getCookies() : 接收cookie
3,Cookie原理
1)服务器创建cookie对象,把会话数据存储到cookie对象中。
new Cookie("name","value");
2) 服务器发送cookie信息到浏览器
response.addCookie(cookie);
举例: set-cookie: name=eric (隐藏发送了一个set-cookie名称的响应头)
3)浏览器得到服务器发送的cookie,然后保存在浏览器端。
4)浏览器在下次访问服务器时,会带着cookie信息
举例: cookie: name=eric (隐藏带着一个叫cookie名称的请求头)
5)服务器接收到浏览器带来的cookie信息
request.getCookies();
4,Cookie的细节
1)void setPath(java.lang.String uri) :设置cookie的有效访问路径。有效路径指的是cookie的有效路径保存在哪里,那么浏览器在有效路径下访问服务器时就会带着cookie信息,否则不带cookie信息。
2)void setMaxAge(int expiry) : 设置cookie的有效时间。
正整数:表示cookie数据保存浏览器的缓存目录(硬盘中),数值表示保存的时间。
负整数:表示cookie数据保存浏览器的内存中。浏览器关闭cookie就丢失了!!
零:表示删除同名的cookie数据
3)Cookie数据类型只能保存非中文字符串类型的。可以保存多个cookie,但是浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。
Cookie的局限:
1)Cookie只能存字符串类型。不能保存对象
2)只能存非中文。
3)1个Cookie的容量不超过4KB。
代码使用:
private static int k = 10; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Cookie[] cookies = request.getCookies(); for (int i = 0; i < cookies.length; i++) { Cookie cookie = cookies[i]; System.out.println("(cookie)"+ cookie.getName() + ":" + cookie.getValue()); } System.out.println(request.getParameter("userName")); Cookie cookie1 = new Cookie("loginTime", "" + (k++)); Cookie cookie2 = new Cookie("name", "xiaoMing"); cookie1.setPath("/Project"); cookie2.setPath("/Project"); cookie1.setMaxAge(-1); cookie2.setMaxAge(-1); response.setContentType("text/html"); response.setCharacterEncoding("UTF-8"); response.addCookie(cookie1); response.addCookie(cookie2); }
网页调用
访问网址:
http://localhost:8080/Project/cookieTest?userName=zhangsan
浏览器端结果,多次访问
MyEclipse的console打印结果
信息: Server startup in 766 ms (cookie)loginTime:1 (cookie)name:xiaoMing zhangsan (cookie)loginTime:10 (cookie)name:xiaoMing zhangsan (cookie)loginTime:11 (cookie)name:xiaoMing zhangsan (cookie)loginTime:12 (cookie)name:xiaoMing zhangsan (cookie)loginTime:13 (cookie)name:xiaoMing zhangsan (cookie)loginTime:14 (cookie)name:xiaoMing zhangsan (cookie)loginTime:15 (cookie)name:xiaoMing zhangsan