Django框架会话技术实例分析【Cookie与Session】


Posted in Python onMay 24, 2019

本文实例讲述了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

  • 生成消息摘要
def generate_password(password):
  #定义算法
  sha = hashlib.sha512()
  #更新算法内容区(密码字节)
  sha.update(password.encode("utf-8"))
  #使用算法生成摘要
  return sha.hexdigest()
  • 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
  • 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
  • token
response.set_cookie("utoken", token)
utoken = request.COOKIES.get("utoken")

希望本文所述对大家基于Django框架的Python程序设计有所帮助。

Python 相关文章推荐
Python 3.x 安装opencv+opencv_contrib的操作方法
Apr 02 Python
django DRF图片路径问题的解决方法
Sep 10 Python
Pytorch加载部分预训练模型的参数实例
Aug 18 Python
springboot配置文件抽离 git管理统 配置中心详解
Sep 02 Python
Python全局锁中如何合理运用多线程(多进程)
Nov 06 Python
jupyter notebook中新建cell的方法与快捷键操作
Apr 22 Python
python mysql自增字段AUTO_INCREMENT值的修改方式
May 18 Python
python3.7+selenium模拟淘宝登录功能的实现
May 26 Python
sklearn线性逻辑回归和非线性逻辑回归的实现
Jun 09 Python
django rest framework 过滤时间操作
Jul 12 Python
python基于爬虫+django,打造个性化API接口
Jan 21 Python
Python Pandas pandas.read_sql函数实例用法
Jun 21 Python
Django框架中间件(Middleware)用法实例分析
May 24 #Python
python与字符编码问题
May 24 #Python
Python读取stdin方法实例
May 24 #Python
python实践项目之监控当前联网状态详情
May 23 #Python
了解不常见但是实用的Python技巧
May 23 #Python
python远程邮件控制电脑升级版
May 23 #Python
python操作日志的封装方法(两种方法)
May 23 #Python
You might like
PHP&MYSQL服务器配置说明
2006/10/09 PHP
PHP Curl出现403错误的解决办法
2014/05/29 PHP
php实现微信原生支付(扫码支付)功能
2018/05/30 PHP
filemanage功能中用到的lib.js
2007/04/08 Javascript
Jquery动态添加及删除页面节点元素示例代码
2014/06/16 Javascript
js模拟淘宝网的多级选择菜单实现方法
2015/08/18 Javascript
浅析AngularJS中的指令
2016/03/20 Javascript
JS+CSS实现的漂亮渐变背景特效代码(6个渐变效果)
2016/03/25 Javascript
jQuery实现下拉框多选 jquery-multiselect 的实例代码
2016/07/14 Javascript
Vue.js路由组件vue-router使用方法详解
2016/12/02 Javascript
JS瀑布流实现方法实例分析
2016/12/19 Javascript
详解在vue-cli项目中安装node-sass
2017/06/21 Javascript
详解vue组件通信的三种方式
2017/06/30 Javascript
JavaScript 值类型和引用类型的初次研究(推荐)
2017/07/19 Javascript
js解决软键盘遮挡输入框的问题分享
2017/12/19 Javascript
在vue项目中引入高德地图及其UI组件的方法
2018/09/04 Javascript
vue移动端下拉刷新和上拉加载的实现代码
2018/09/08 Javascript
详解如何webpack使用DllPlugin
2018/09/30 Javascript
vue3.0 搭建项目总结(详细步骤)
2019/05/20 Javascript
Vue Components 数字键盘的实现
2019/09/18 Javascript
Vue数据双向绑定底层实现原理
2019/11/22 Javascript
jquery 插件重新绑定的处理方法分析
2019/11/23 jQuery
vue实现路由不变的情况下,刷新页面操作示例
2020/02/02 Javascript
手把手带你入门微信小程序新框架Kbone的使用
2020/02/25 Javascript
jquery实现烟花效果(面向对象)
2020/03/10 jQuery
JS函数参数的传递与同名参数实例分析
2020/03/16 Javascript
三步搞定:Vue.js调用Android原生操作
2020/09/07 Javascript
[04:17]DOTA2完美盛典,rOtk、BurNIng携手巴图演唱《倔强》
2017/11/28 DOTA
利用nohup来开启python文件的方法
2019/01/14 Python
Python中Unittest框架的具体使用
2019/08/27 Python
计算Python Numpy向量之间的欧氏距离实例
2020/05/22 Python
Bose法国官网:购买耳机、扬声器、家庭影院、专业音响
2017/12/21 全球购物
护理专业毕业生自荐信范文
2014/01/05 职场文书
授权收款委托书
2014/09/23 职场文书
高中政治教学反思
2016/02/23 职场文书
使用Springboot实现健身房管理系统
2021/07/01 Java/Android