深入解析Tomcat服务器如何处理和传递Cookie数据:从AServlet到BServlet的完整流程
● 响应头:set-cookie

● 请求头:cookie
● AServlet 向前端发送Cookie,BServlet 从请求中获取Cookie 功能。
● 当AServlet 响应数据时,Tomcat 服务器基于HTTP 协议响应数据。
● 当Tomcat 发现后端返回Cookie 对象时,Tomcat 会在响应头中添加一行数据Set-Cookie:username=zs。
● 浏览器获得响应结果后,可以从响应头中获取Set-Cookie 对应值username=zs,并将该数据存储在浏览器内存中。
● 当浏览器再次向BServlet发送请求时,浏览器会自动在请求头中添加Cookie:username=zs并发送给服务器BServlet
● Request对象会将请求头中cookie对应的值封装成Cookie对象,最终形成一个数组。
● BServlet 通过Request 对象获得Cookie[]后,就可以从中获取自己需要的数据。
Cookie 使用详情
● 设置cookie的生存时间
setMaxAge(int 秒)
参数值为:
1. 正数:将cookie写入浏览器所在计算机的硬盘中进行持久存储。时间到了自动删除
2.负数:默认值,cookie在当前浏览器内存中。当浏览器关闭时,cookie 就会被销毁。
3. 清零:删除对应的cookie
存储汉字的编码和解码
.在AServlet中对中文URL进行编码,使用URLEncoder.encode(),并将编码值存储在Cookie中
2. 获取BServlet中Cookie中的值。获取的值是 URL 编码的值。
3. 对得到的值进行URL解码,使用URLDecoder.decode()得到对应的中文值。
会议
服务器端会话技术
在服务器端存储数据;每节课一次;
基于cookie,即向客户端保存特殊标识符,将共享数据保存到服务器的内存对象中。每次发出请求时,都会将标识符带到服务器,然后通过标识符查找对应的内存空间,实现数据共享。
原理分析:
浏览器A第一次访问服务器(即创建session和cookie),保存后可以多次访问;
在浏览器B中首次访问服务器(即创建session和cookie);
服务器如何区分不同浏览器->session是基于cookie实现的。不同的浏览器每次访问都是通过cookie来区分的。没有cookie,就无法获取session。
基本使用
● 获取Session对象,使用request对象
HttpSession 会话 = request.getSession();
● Session 对象提供的功能:
○ 将数据存储在会话字段中
void setAttribute(字符串名称, 对象 o)
○ 根据key获取value
○ Session中可以存储的是Object类型的数据,也就是说Session中可以存储任何数据类型。
对象 getAttribute(字符串名称)
○ 根据key删除键值对
无效删除属性(字符串名称)
会话是在会话中的两个请求之间共享数据的能力。
会话激活和钝化
服务器重启后会话一般不会消失。
● 钝化:服务器正常关闭后,Tomcat 会自动将Session 数据写入硬盘上的文件中。
○ 钝化数据路径为:项目目录\target\tomcat\work\Tomcat\localhost\项目名\SESSIONS.ser
● 激活:重启服务器后,将文件中的数据加载到Session中
○ 数据加载到Session后,该路径下的SESSIONS.ser文件会被删除。
注意
● 会话数据存储在服务器端。服务器重启后,会话数据将被保存。
● 浏览器关闭并启动后,重新建立的连接已经是一个新的会话,获取到的会话数据也是一个新的对象。
● 如果要共享会话数据,则无法关闭浏览器,因此会话数据无法长期保存。
● Cookie 存储在客户端,可以长期保存。
会话被破坏
默认不进行任何操作,30分钟后自动销毁。
● 在项目的web.xml中配置
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<session-config>
<session-timeout>100session-timeout>
session-config>
web-app>
● 如果不配置,默认为30 分钟。默认值硬编码在 Tomcat 的 web.xml 配置文件中。
2.调用Session对象的invalidate()将其销毁
会话和cookie的区别
共同点:
应用场景:
● 购物车:使用cookies来存储
● 显示已登录用户的名称:使用Session 来存储
● 记住我功能:使用cookies来存储