————解决痛点————
1.解决短连接无法保存用户状态的问题
2.延长了请求的生命周期
————Cookie————
1.客户端会话技术(数据存储在客户端)
2.以key-value的形式进行存储
3.cookie的操作都是通过Response来实现的
4.典型场景:购物车、登录信息
5.支持过期时间
6.Cookie清除策略:
①默认关闭浏览器时cookie自动清除
②配置Cookie过期时间:
max-age=0 关闭就失效
max-age=None 永久有效
max-age = int 单位秒
expires 过期时间,和max-age功能基本一致
7.用户登出,就是清除了cookie(令牌)
————Session————
1.服务端会话技术
2.Session依赖于Cookie:将Session在数据库中的session_key,当作sessionid,存储在cookie中
3.Session数据存储在数据库中,并且做了基本的数据安全处理(base64编码)
————Token————
1.服务端会话技术
2.相当于手动实现的session
3.值应该是唯一的:
·要通过特定算法保证唯一
·时间
·ip
·域名
·网卡 mac
·随机数
————用户管理实例————
1.用户注册
将数据存储到数据库
数据安全——》密码对谁都是不透明的
2.用户登陆
将登陆提交过来的信息和数据库内的信息进行校验
返回不成功结果要刻意模糊概念
3.用户信息
根据用户的唯一标识,去获取用户
4.用户退出
清除令牌
清理cookie,session,或 token
————数据安全————
1.策略
服务器的数据对任何人来说都应该是不可见的(不透明)
可以使用常见的摘要算法对数据进行摘要(md5,sha)
在所有数据验证的地方都加上安全保护措施
2.摘要算法
hashlib
——>①sha(不做拓展)
——>②
md5特性
—>用来验证数据完整性(不被篡改):
哪怕【消息原文】被改动一丁点,【篡改版消息生成的消息摘要】都会与【原始消息所生成的消息摘要】的大相径庭
—>统一输出:输出默认都是
128位二进制数
,
32位16进制数
—>单向不可逆
3.UUID
唯一标识
纳秒级的时间:1ns 创建 1m个id
mac 地址
机器编码
随机数
uuid:uuid1()、uuid3()、uuid4()、uuid5()
————常用API————
1.生成消息摘要
def generate_password(password):
#定义算法
sha = hashlib.sha512()
#更新算法内容区(密码字节)
sha.update(password.encode("utf-8"))
#使用算法生成摘要
return sha.hexdigest()
<------------------------------------------------------>
2.cookie
response.set_cookie("uname", username)
response.set_cookie("uname", username, max_age=30)
*(未能实现)response.set_cookie("uname", username, expires=timedelta(minutes=1))
uname = request.COOKIES.get('uname',None)
response.delete_cookie("uname")
助记:
①操作客户端唯有通过Response对象
②方法无非get,set,delete
<------------------------------------------------------>
3.session
uname = request.session.get('uname')
request.session['uname'] = username
request.session.flush() ——>同时清除cookie 和 session
del request.session['uname']
助记:
①session是存在于服务端本地的,而Request的COOKIE当中存有sessionid,因此通过Request对象去关联用户的session
②方法无非get,set,del,flush
<------------------------------------------------------>
4.token
response.set_cookie("utoken", token)
utoken = request.COOKIES.get("utoken")