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