目录
一、Cookie
1.定义
当用户第一次访问网站时,服务器会创建一个Cookie并将其发送到用户的浏览器。浏览器会将Cookie存储在本地,并在随后的请求中将其发送回服务器。这样,服务器就可以通过Cookie来识别用户,并据此提供相应的服务。
2.特点
(1)存储位置:Cookie数据保存在客户端的浏览器上。
(2)存储类型:Cookie只能存储字符串类型的数据。
(3)大小限制:单个Cookie保存的数据大小通常不超过4KB,且一个网站在客户端存放的Cookie数量也有限制(如大多数浏览器限制一个站点最多保存20个Cookie)。
(4)生命周期:Cookie的生命周期可以由服务器设置,可以设置为会话期间有效(即浏览器关闭时失效),也可以设置为持久化存储(即浏览器关闭后仍然有效)。
二、Session
1.定义
当用户首次访问网站时,则 Web 服务器将自动创建一个 Session 对象。该对象的sessionID会被传递给用户的浏览器,并将其存储在用户的浏览器中(通常是通过Cookie的形式)。在随后的请求中,用户会携带这个Session ID与服务器进行通信,服务器则根据Session ID来识别用户并提供相应的服务。
2.特点
(1)存储位置:Session数据保存在服务器上。
(2)存储类型:Session能够存储任意的Java对象(或其他编程语言的对象),不仅限于字符串类型。
(3)大小限制:Session的大小限制通常取决于服务器的内存大小,没有固定的限制。
(4)生命周期:Session的生命周期由服务器设置,一般为一段固定的时间(如30分钟)。如果用户在这段时间内没有与服务器进行交互,则Session会被自动销毁。
三、Cookie与Session在Web应用中的协作方式
1.用户第一次访问网站,服务器为该用户创建一个Session,并生成一个Session ID。
2.服务器将Session ID通过设置响应头的Set-Cookie字段发送给客户端浏览器。
3.浏览器收到响应后,会将Session ID保存为Cookie。
4.在之后的每次HTTP请求中(只要请求的资源在Cookie的作用域内,且未过期),浏览器都会自动在请求头部包含Cookie字段,并将之前保存的包含Session ID的Cookie发送给服务器。
5.服务器通过解析请求头中的Cookie字段,获取到对应的Session ID。
6.服务器使用Session ID来查找对应的Session,一旦找到对应的Session,服务器就可以读取或更新该Session中存储的用户状态信息。
四、Cookie与Session的区别
Session | Cookie | |
存储位置 | 服务器端 | 客户端浏览器 |
存储类型 | 可以存储任意对象 | 只能存储字符串类型数据 |
大小限制 | 无固定限制,取决于服务器内存 | 单个Cookie不超过4KB,站点限制视浏览器而定 |
安全性 | 相对较高,数据存储在服务器上 | 相对较低,数据存储在客户端,可能被篡改或窃取 |
生命周期 | 由服务器设置,一般为固定时间(Tomcat中session的默认生命周期是30分钟) | 可由服务器设置,可以是会话期间有效或持久化存储 |
应用场景 | 用户登录状态管理、用户数据共享等 | 用户登录状态保持、用户偏好设置等 |