07-Cookie&Session
1、 会话跟踪技术
- 概念
- 会话:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束,在一次会话中可以包含多次请求和响应
- HTTP协议是无状态的,每次浏览器向服务器请求时,服务器都会将该请求视为新的请求,因此我们需要会话跟踪技术来实现会话内数据共享
- 实现方式
- 客户端会话跟踪技术:Cookie
- 服务端会话跟踪技术:Session
2、Cookie
- Cookie
- 客户端会话技术,将数据保存到客户端,以后每次请求都携带Cookie数据进行访问
- Cookie的基本使用
2.1、Cookie原理
- Cookie的实现是基于HTTP协议的
- 响应头:set-cookie
- 请求头:cookie
- 查看Cookie
2.2、Cookie细节
- Cookie存活时间
- 默认情况下,Cookie存储在浏览器内存中,当浏览器关闭,内存释放,则Cookie被销毁
setMaxAge(int seconds)
:设置Cookie存活时间,单位是秒- 1.正数:将Cookie写入浏览器所在电脑的硬盘,持久化存储,到时间自动删除
- 2.负数:默认值,Cookie在当前浏览器内存中,当浏览器关闭时,Cookie被销毁
- 3.零:删除对应Cookie
- Cookie存储中文
- Tomcat7 Cookie 不能直接存储中文
- 如果需要存储中文,则需要进行转码,URL编码
3、Session
-
Session
- 服务端会话跟踪技术:将数据保存到服务端
- JavaEE提供HttpSession接口,来实现一次会话的多次请求间数据共享功能
-
Session的基本使用
-
1.获取Session对象
-
HttpSession session = request.getSession();
-
-
2.Session对象功能
- ①
void setAttribute(String name, Object o)
:将数据存储到session域中 - ②
Object getAttribute(String name)
:根据key获取值 - ③
void removeAttribute(String name)
:根据key删除该键值对
- ①
-
3.1、Session原理
- Session是基于Cookie实现的
3.2、Session细节
- Session钝化、活化
- 钝化
- 在服务器正常关闭后,Tomcat自动将Session数据写入硬盘的文件中
- 活化
- 再次启动服务器后, 从文件中加载数据到Session中
- 钝化
- Session销毁
- 默认情况下, 没有其他操作, 30分钟会自动销毁
- 手动销毁
- 调用Session对象的
invalidate()
方法
- 调用Session对象的
4、Cookie和Session之间的异同点
- 相同点
- Cookie和Session都是来完成一次会话内多次请求间数据共享的
- 区别
- 键值对数量
- Cookie存一个键和一个值
- Session存n个键和值
- 存储位置
- Cookie是将数据存储在客户端
- Session将数据存储在服务端
- 安全性
- Cookie不安全
- Session安全
- 数据大小
- Cookie最大4KB
- Session无大小限制
- 存储时间
- Cookie默认浏览器关闭
- Session默认30分钟
- 服务器性能
- Cookie不占用服务器资源
- Session占用服务器资源
- 键值对数量