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 ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍
Jun 10 Python
Python快速从注释生成文档的方法
Dec 26 Python
Python上下文管理器和with块详解
Sep 09 Python
TensorFlow 模型载入方法汇总(小结)
Jun 19 Python
python 自定义异常和异常捕捉的方法
Oct 18 Python
Python实现繁体中文与简体中文相互转换的方法示例
Dec 18 Python
pip安装py_zipkin时提示的SSL问题对应
Dec 29 Python
python判断文件是否存在,不存在就创建一个的实例
Feb 18 Python
Python3中函数参数传递方式实例详解
May 05 Python
PyQt5+python3+pycharm开发环境配置教程
Mar 24 Python
Python实现读取并写入Excel文件过程解析
May 27 Python
新手必备Python开发环境搭建教程
May 28 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设计模式 Visitor 访问者模式
2011/06/28 PHP
php中经典方法实现判断多维数组是否为空
2011/10/23 PHP
护卫神php套件 php版本升级方法(php5.5.24)
2015/05/10 PHP
Yii框架组件和事件行为管理详解
2016/05/20 PHP
Laravel实现autoload方法详解
2017/05/07 PHP
HTML TO JavaScript 转换
2006/06/26 Javascript
编写高性能的JavaScript 脚本的加载与执行
2010/04/19 Javascript
javascript实现日历控件(年月日关闭按钮)
2012/12/12 Javascript
基于NodeJS的前后端分离的思考与实践(一)全栈式开发
2014/09/26 NodeJs
如何实现chrome浏览器关闭页面时弹出“确定要离开此面吗?”
2015/03/05 Javascript
JavaScript实现的圆形浮动标签云效果实例
2015/08/06 Javascript
QQ登录背景闪动效果附效果演示源码下载
2015/09/22 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单的实现代码
2016/06/23 Javascript
JS实现按钮颜色切换效果
2020/09/05 Javascript
原生JS进行前后端同构
2018/04/22 Javascript
在NPM发布自己造的轮子的方法步骤
2019/03/09 Javascript
[48:21]林俊杰圣堂刺客超神杀戮秀
2014/10/29 DOTA
python 快速把超大txt文件转存为csv的实例
2018/10/26 Python
Python3爬虫学习之将爬取的信息保存到本地的方法详解
2018/12/12 Python
Python3利用print输出带颜色的彩色字体示例代码
2019/04/08 Python
Python上下文管理器用法及实例解析
2019/11/11 Python
6行Python代码实现进度条效果(Progress、tqdm、alive-progress​​​​​​​和PySimpleGUI库)
2020/01/06 Python
详解Python中Pyyaml模块的使用
2020/10/08 Python
html5视频播放_动力节点Java学院整理
2017/07/13 HTML / CSS
联想哥伦比亚网上商城:Lenovo Colombia
2017/01/10 全球购物
美国百年历史早餐食品供应商:Wolferman’s
2017/01/18 全球购物
北欧最好的童装网上商店:Babyshop
2019/09/15 全球购物
荷兰家电销售网站:Welhof
2020/12/08 全球购物
Aosom西班牙:家具在线商店
2020/06/11 全球购物
温泉秘密:Onsen Secret
2020/07/06 全球购物
正规的求职信范文分享
2013/12/11 职场文书
餐饮加盟计划书
2014/01/10 职场文书
妇女干部培训方案
2014/05/12 职场文书
运动会表扬稿
2015/01/16 职场文书
pytorch损失反向传播后梯度为none的问题
2021/05/12 Python
springboot + mongodb 通过经纬度坐标匹配平面区域的方法
2021/11/01 MongoDB