Cookie

1. 什么是Cookie?

将用户的会话状态保存在浏览器的技术

2. Cookie的原理

  1. 服务器使用set-cookie的响应头,将用户的会话状态发送给浏览器进行保存
  2. 浏览器使用cookie的请求头,将自己保存的会话状态发送给服务器,供服务器使用
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BqNszXGF-1569735582665)(day07-5.png])

3. 具体的API

原始的API

	response.setHeader("set-cookie","name=admin");
	String value=request.getHeader("cookie");
	value="name=admin;age=18;id=123";

Sun公司提供的API
存Cookie:

	Cookie cookie=new Cookie("name","admin");
	cookie.getName();
	cookie.getValue();
	response.addCookie(cookie);

取Cookie:

	Cookie[] cs=request.getCookies();
		cs->cookie1 name,admin
		  ->cookie2 age,18
	      ->cookie3 id,123

4. Cookie的有效时间

  1. 默认情况:如果没有为一个Cookie设置一个有效时间,该Cookie默认是会话级别的,保存在浏览器的内存中,一旦浏览器关闭,Cookie数据也会被销毁
  2. 可以主动为Cookie设置一个有效时间,该Cookie会被保存在用户的硬盘上,在Cookie到期之前,多次关闭和打开浏览器,该Cookie一直有效
  3. API: cookie.setMaxAge(int seconds);

5. Cookie的路径

  1. 浏览器在保存一个Cookie时,还会保存该Cookie的路径信息,里面包含2部分信息

    1. domain:指代域名,例如localhost,www.baidu.com
    2. path:具体的路径 /servlet07
  2. 当浏览器要发送一个请求时,需要判断本次请求携带哪些Cookie,判断的依据是:如果当前请求的url和一个Cookie的domain+path一致,或者是一个Cookie的domain+path的子路径,则本次请求携带该Cookie

Cookie: domain:/localhost path: /servlet07/user

url1: www.taobao.com/index.html -> 不携带
url2: localhost/servlet06/addUser -> 不携带
url3: localhost/servlet07/addUser -> 不携带

url4: localhost/servlet07/user -> 携带
url5: localhost/servlet07/user/addUser-> 携带

1. 设置一个Cookie的路径
1. 默认情况下,Cookie的path和发送它的Servlet的父路径一致
	1. Servlet1 :   /servlet07/user/access  
	2. Cookie /servlet07/user/

2. 可以手动设置一个Cookie的路径

	cookie.setPath(url)
2. 为什么要设置Cookie的路径

在这里插入图片描述

3. 设置domain(了解)

	cookie.setDomain("www.taobao.com");
	大部分浏览器会默认拒绝第三方Cookie,如果发现一个Cookie设置了domain,可能直接拒收

###4. 动态获取当前项目映射的路径

	request.getContextPath(); // -> /servlet08

6. Cookie的删除

服务器向浏览器发送一个和被删除Cookie同name,同path和同domain的Cookie,并将该Cookie的maxAge设置为0,浏览器收到这个新的Cookie后,会替换原Cookie,并马上删除新的Cookie

7. 浏览器如何识别一个Cookie

浏览器会根据一个Cookie的name+path+domain的组合来唯一标识一个Cookie
name path domain
“remname” /servlet07/abc localhost
“remname” /servlet07/abc www.taobao.com
“remname” /servlet07 www.taobao.com

8. Cookie中的中文问题

  1. Cookie中存中文会出现异常:
    Control character in cookie value or attribute.

  2. 异常的原因
    1. Cookie中存入了中文字符
    2. 根据http的设计,Cookie中的数据使用ASCII字符集来传输

  3. 解决方案
    发: username=URLEncoder.encode(username,“UTF-8”)
    收: username=URLDecoder.decode(username,“UTF-8”)
    在这里插入图片描述

8. 补充 Cookie的特点

  1. Cookie可能会被用户删除,稳定性不高
  2. Cookie保存在客户电脑上,安全性也不高
  3. Cookie保存数据的大小有限制,一般是4kb
  4. 一个浏览器保存Cookie的数量也有限制,一个网站20个,一共保存300个
  5. Cookie可以持久保存,例如30天
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值