摘要:本文学习了Cookie的原理和使用方法。
环境
Windows 10 企业版 LTSC 21H2
Java 1.8
Tomcat 8.5.50
1 简介
HTTP协议是典型的无状态协议,其核心特点是服务器无法留存浏览器的访问状态,也无法识别两次请求是否来自同一客户端。而Cookie技术正是解决这一状态保持难题的核心方案之一。
Cookie本质是由服务器下发并在浏览器本地保存的一段小型文本信息,浏览器后续在给同一个服务器发送请求时,会将Cookie信息附加在请求头中,服务器根据Cookie信息识别用户身份。
需要补充的是,Cookie存储容量有限,通常单条Cookie不超过4KB,且存在跨域限制,因此在复杂场景中还需结合Session和Token等技术协同完成状态管理。
2 简单使用
服务端创建并发送Cookie到浏览器:
1 | Cookie cookie = new Cookie("name", "value"); |
在浏览器首次访问服务器时,会在响应头Set-Cookie中发现Cookie信息。
浏览器会自动将Cookie信息保存到本地,后续请求会自动将Cookie信息附加在请求头Cookie中发送给服务端。
服务端获取浏览器发送的Cookie信息:
1 | Cookie[] cookies = request.getCookies(); |
由于JSP页面的page指令的session属性默认值为true,因此JSP引擎会自动调用getSession()方法创建Session对象,同时会创建名为JSESSIONID值为Session唯一标识的Cookie对象,然后将Cookie对象响应给浏览器。
3 常用设置
3.1 设置时效
设置时效,传入秒数:
1 | public void setMaxAge(int expiry); |
说明:
- 如果不设置,则默认在浏览器关闭时失效。
- 如果设置为0,则立即删除。
- 如果设置为正数,则在指定秒数后失效。
- 如果设置为负数,则在浏览器关闭时失效。
3.2 设置路径
设置路径,限定只有访问该路径下的资源时才会携带这个Cookie信息:
1 | public void setPath(String uri); |
条