Javaweb-Cookie

Cookie

一.HTTP协议和Cookie

  • Cookie是HTTP协议制定的,先由服务器保存Cookie到浏览器,在下次浏览器请求服务器时把上一次请求得到的Cookie归还给服务器
  • 由服务器创建保存到客户端浏览器的一个键值对,服务器保存Cookie的响应头:Set-Cookie:aaa=AAA Set-Cookie:bbb=BBB

    response.addHeader("Set-Cookie","aaa=AAA");response.addHeader("Set-Cookie","bbb=BBB");

  • 当浏览器请求服务器时,会把该服务器保存的Cookie随请求发送到服务器。浏览器归还Cookie的请求头:Cookie:aaa=AAA;bbb=BBB;
  • HTTP协议规定(保证不给浏览器太大压力)

    1个Cookie最大4KB
    1个服务器最多向1一个浏览器保存20个Cookie
    1个浏览器最多可以保存300个Cookie

二.Cookie的用途

  • 服务器使用Cookie来跟踪客户端状态
  • 保存购物车(购物车中的商品不能使用request保存,因为他是一个用户向服务器发送的多个请求信息)
  • 显示上交登录名(也是一个用户多个请求)

三.JavaWeb中使用Cookie

>原始方式(了解):

  • 使用response发送Set-Cookie响应头
  • 使用request获取Cookie请求头

>便捷方式(精通):

  • 使用response.addCookie()方法向浏览器保存Cookie
  • 使用request.getCookies()方法获取浏览器归还的Cookie

>Cookie案例

  1. 通过a.jsp保存Cookie(可以在浏览器设置中查看保存的cookie)
  2. 通过b.jsp获取浏览器归还的Cookie

a.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>




Insert title here


<%
	Cookie cookie1 = new Cookie("aaa","AAA");
	response.addCookie(cookie1);
%>

b.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>




Insert title here


<%
	Cookie[] cks = request.getCookies();
	if(cks != null){
		for(Cookie c : cks){
			out.print(c.getName() + "=" + c.getValue() + "
"); } } %>

四.Cookie详解

Cookie不只有name和value两个属性

Cookie的maxAge:

Cookie的最大生命,即Cookie可保存的最大时长,以秒为单位,例如:cookie.setMaxAge(60)表示这个Cookie会被浏览器保存到硬盘

  • maxAge>0:浏览器会把cookie保存到客户机硬盘中,有效时长为maxAge的值决定
  • maxAge<0:Cookie只在浏览器内存中存在,当用户关闭浏览器时,浏览器进程结束,同时cookie也就死亡了
  • maxAge=0:浏览器会马上删除这个Cookie

Cookie的path:

Cookie的path并不是设置这个Cookie在客户端的保存路径
Cookie的path由服务器创建Cookie时设置
访问路径是否带cookie路径,如果包含则归还Cookie,反之则不归还;

例如:
aCookie.path=/temp/;bCookie.path=/temp/jsp/;cCookie.path=/temp/jsp/cookies;

  • 访问:/temp/index.jsp,归还aCookie
  • 访问:/temp/jsp/a.jsp,归还aCookie,bCookie
  • 访问:/temp/jsp/cookies/b.jsp,归还aCookie,bCookie,cCookie

Cookie的domain:

domain用来指定Cookie的域名!当多个二级域中共享Cookie时才有用
例如:www.baidu.com、zhidao.baidu.com、news.baidu.com

  • 设置domain为:cookie.setDomain(".baidu.com");
  • 设置path为:cookie.setPath("/");

你可能感兴趣的:(Javaweb)