会话技术
- 出现场景
- 服务器如何识别客户端
- Http 在 Web 开发中基本都是短连接 - 请求生命周期
- 从 Request 开始
- 到 Response 结束 - 种类
- Cookie
- 客户端会话技术
- 数据存储在客户端
- 键值对存储
- 支持过期时间
- 默认 Cookie 会自动携带,本网站所有 Cookie
- Cookie 跨域名,跨网站
- 通过 HttpResponse
- Cookie 默认不支持中文
- 可以加盐
- 加密
- 获取的时候需要解密response.set_cookie ( key , value , max_age = None , exprise = None )
max_age : 整数,指定 cookie 过期时间
exprise : 整数,指定过期时间,还支持是一个 datatime 或 timedelta ,可以指定一个具体的过期时间
max_age 和 expries 两个选一个指定
过期时间的几个关键时间
max_age 设置为0浏览器关闭失效
设置为 None 永不过期
expries = timedelta(days = 10) 10天后过期
- Session
- 服务端会话技术
- 数据存储在服务器中
- 默认 Session 存储在内存中
- Django 中默认会把 Session 持久化到数据库中
- Django 中 Session 的默认过期时间是14天
- 主键是字符串
- 数据是使用了数据安全
- 使用的 base64
- 在前部添加了一个混淆串
- Session 依赖于 Cookie
Session 常用操作
get(key , default = None)根据键获取会话的值
clear() 清除所有会话
flush() 删除当前的会话数据并删除会话的 cookie
delete request[“session_id”] 删除会话
session.session_key 获取 session 的 key
设置数据
request.session[‘user’] = username
数据存储到数据库中会进行编码使用的是 Base64
- Token
- 服务端会话技术
- 自定义 Session
- 如果 Web 页面开发中,使用起来和 Session 基本一致
- 如果使用在移动端或客户端开发中,通常以 json 形式存储,通常移动端自己存储 Token ,需要获取 Token 关联数据的时候,主动传递 Token
Cookie,Session 和 Token 对比
- Cookie 使用更简洁,服务器压力更小,数据不是很安全
- Session 服务器要维护 Session ,相对安全
- Token 拥有 Session 的所有优点,自己维护略微麻烦,支持更多的终端