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 相关文章推荐
本地文件上传到七牛云服务器示例(七牛云存储)
Jan 11 Python
实例讲解Python编程中@property装饰器的用法
Jun 20 Python
Python之web模板应用
Dec 26 Python
python实现写数字文件名的递增保存文件方法
Oct 25 Python
老生常谈python中的重载
Nov 11 Python
Python实现二叉树的常见遍历操作总结【7种方法】
Mar 06 Python
Python实现的矩阵转置与矩阵相乘运算示例
Mar 26 Python
Scrapy-Redis结合POST请求获取数据的方法示例
May 07 Python
Python学习笔记基本数据结构之序列类型list tuple range用法分析
Jun 08 Python
Python csv文件的读写操作实例详解
Nov 19 Python
python实现数据结构中双向循环链表操作的示例
Oct 09 Python
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
Jun 11 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中通过ADODB库实现调用Access数据库之修正版本
2006/12/31 PHP
php垃圾代码优化操作代码
2010/08/05 PHP
php下统计用户在线时间的一种尝试
2010/08/26 PHP
php数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
2011/10/29 PHP
php更新mysql后获取改变行数的方法
2014/12/25 PHP
微信公众平台开发之配置与请求
2015/08/26 PHP
刷新PHP缓冲区为你的站点加速
2015/10/10 PHP
php $_SESSION会员登录实例分享
2021/01/19 PHP
php实现图片上传时添加文字和图片水印技巧
2020/04/18 PHP
PHP内存溢出优化代码详解
2021/02/26 PHP
javascript中的array数组使用技巧
2010/01/31 Javascript
script标签属性type与language使用选择
2012/12/02 Javascript
js select option对象小结
2013/12/20 Javascript
js获取鼠标点击的位置实现思路及代码
2014/05/09 Javascript
jQuery插件Tmpl的简单使用方法
2015/04/27 Javascript
全面解析Bootstrap中tooltip、popover的使用方法
2016/06/13 Javascript
JS基于HTML5的canvas标签实现炫目的色相球动画效果实例
2016/08/24 Javascript
微信小程序之拖拽排序(代码分享)
2017/01/21 Javascript
详解vue-cli + webpack 多页面实例应用
2017/04/25 Javascript
vue-cli项目中怎么使用mock数据
2017/09/27 Javascript
在vue中使用express-mock搭建mock服务的方法
2018/11/07 Javascript
Vue中的情侣属性$dispatch和$broadcast详解
2019/03/07 Javascript
javascript设计模式 ? 原型模式原理与应用实例分析
2020/04/10 Javascript
[01:08]DOTA2“血战之命”预告片
2017/08/12 DOTA
跟老齐学Python之不要红头文件(2)
2014/09/28 Python
python 3.6.5 安装配置方法图文教程
2018/09/18 Python
python 实现二维字典的键值合并等函数
2019/12/06 Python
Python OpenCV读取中文路径图像的方法
2020/07/02 Python
详解python算法常用技巧与内置库
2020/10/17 Python
python爬取youtube视频的示例代码
2021/03/03 Python
Html5 Canvas 实现一个“刮刮乐”游戏
2019/09/05 HTML / CSS
巴西备受欢迎的服装和生活方式品牌:FARM Rio
2020/02/04 全球购物
入党积极分子党支部意见
2015/06/02 职场文书
2016年毕业实习心得体会范文
2015/10/09 职场文书
九年级历史教学反思
2016/02/19 职场文书
解决flex布局中子项目尺寸不受flex-shrink限制
2022/05/11 HTML / CSS