会话技术 cookie session Token
出现场景
服务器如何识别客户端
Http在Web开发中基本都是短连接
请求生命周期
从Request开始 到Response结束
cookie
cookie:客户端会话技术。
特性:
- 数据存储在客户端。
- 以键值对方式存储。
- 支持过期时间。
- 默认Cookie会自动携带,本网站所有Cookie
- Cookie不能跨域名,跨网站。
- 本身由浏览器生成,通过HTTPResponse将cookie写给客户端。
- Cookie默认不支持中文。可通过base64进行加装,来支持中文
- 设置可以加盐(salt)。即进行加密处理。同样,获取的时候需要解密。
#加盐
response.set_signed_cookie(key, value, salt)
#解密
request.get_signed_cookie(key, salt)
session
- 服务端会话技术。
- 数据存储在服务器中。默认存储在内存。Django默认存储在DB中,默认过期时间是14天。
- 主键是字符串。
- 数据使用了数据安全。运用了base64编码,在前部添加了混淆串。
- session依赖于cookie。
# django中常用的操作方法
get(key, default=None) # 根据key获取会话的值。
clear() # 清楚所有会话。
flush() # 删除当前的会话数据并删除会话的Cookie。
delete request['sessionid'] # 删除会话
session.session_key # 获取session的key
# 设置数据,数据存储到db中,使用base64编码
request.session['user'] = username
Token
- 服务端会话技术
- 相当于自定义session
- 如果用在web页面开发中,使用和session基本一致。如果是前后端分离,则多使用JWT。
- 如果使用在移动端或客户端中,通常以json形式传输,需要移动端自己存储token,需要获取Token关联数据的时候,主动传递Token。
cookie session Token对比
- cookie使用更简洁,服务器压力更小,数据不是很安全。
- session服务器要维护Session,相对安全。
- Token拥有Session的所有优点,支持更多终端。维护相对麻烦。