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 自动安装 Rising 杀毒软件
Apr 24 Python
跟老齐学Python之集合(set)
Sep 24 Python
python打开网页和暂停实例
Sep 30 Python
python实现xlsx文件分析详解
Jan 02 Python
Flask和Django框架中自定义模型类的表名、父类相关问题分析
Jul 19 Python
Python3中exp()函数用法分析
Feb 19 Python
python查看文件大小和文件夹内容的方法
Jul 08 Python
解决python彩色螺旋线绘制引发的问题
Nov 23 Python
django序列化serializers过程解析
Dec 14 Python
python两种注释用法的示例
Oct 09 Python
python 利用jieba.analyse进行 关键词提取
Dec 17 Python
Python实现Word文档转换Markdown的示例
Dec 22 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
CodeIgniter生成网站sitemap地图的方法
2013/11/13 PHP
Laravel框架使用monolog_mysql实现将系统日志信息保存到mysql数据库的方法
2018/08/16 PHP
JavaScript 撑出页面文字换行
2009/06/15 Javascript
使用Microsoft Ajax Minifier减小JavaScript文件大小的方法
2010/04/01 Javascript
基于jquery的地址栏射击游戏代码
2011/03/10 Javascript
js+html+css实现鼠标移动div实例
2013/01/30 Javascript
防止浏览器记住用户名及密码的简单实用方法
2013/04/22 Javascript
jQuery Animation实现CSS3动画示例介绍
2013/08/14 Javascript
解析JavaScript中的不可见数据类型
2013/12/02 Javascript
动态创建script标签实现跨域资源访问的方法介绍
2014/02/28 Javascript
使用iframe window的scroll方法控制iframe页面滚动
2014/03/05 Javascript
js实现从数组里随机获取元素
2015/01/12 Javascript
jquery中filter方法用法实例分析
2015/02/06 Javascript
jQuery实现的输入框选择时间插件用法实例
2015/02/28 Javascript
jQuery插件slides实现无缝轮播图特效
2015/04/17 Javascript
Javascript实现网络监测的方法
2015/07/31 Javascript
jQuery实现布局高宽自适应的简单实例
2016/05/28 Javascript
js实现砖头在页面拖拉效果
2020/11/20 Javascript
微信小程序支付及退款流程详解
2017/11/30 Javascript
使用vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)功能
2018/03/22 Javascript
ES10 特性的完整指南小结
2019/03/04 Javascript
Vuex持久化插件(vuex-persistedstate)解决刷新数据消失的问题
2019/04/16 Javascript
vue自定义标签和单页面多路由的实现代码
2020/05/03 Javascript
[47:26]完美世界DOTA2联赛 LBZS vs Forest 第二场 11.07
2020/11/09 DOTA
Python自定义函数的创建、调用和函数的参数详解
2014/03/11 Python
Python单例模式实例详解
2017/03/01 Python
Python Pillow Image Invert
2019/01/22 Python
Appium+python自动化怎么查看程序所占端口号和IP
2019/06/14 Python
JetBrains PyCharm(Community版本)的下载、安装和初步使用图文教程详解
2020/03/19 Python
Python中Selenium模块的使用详解
2020/10/09 Python
python 进制转换 int、bin、oct、hex的原理
2021/01/13 Python
巧克力领导品牌瑞士莲美国官网:Lindt Chocolate美国
2016/08/25 全球购物
Java程序员常见面试题
2015/07/16 面试题
会计自我鉴定
2013/11/02 职场文书
Python内置包对JSON文件数据进行编码和解码
2022/04/12 Python
Java实现简单小画板
2022/06/10 Java/Android