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动态参数用法实例分析
May 25 Python
python类装饰器用法实例
Jun 04 Python
简单掌握Python中glob模块查找文件路径的用法
Jul 05 Python
Python2实现的图片文本识别功能详解
Jul 11 Python
Django渲染Markdown文章目录的方法示例
Jan 02 Python
Python字符串逆序输出的实例讲解
Feb 16 Python
python json 递归打印所有json子节点信息的例子
Feb 27 Python
Django自关联实现多级联动查询实例
May 19 Python
Python爬虫headers处理及网络超时问题解决方案
Jun 19 Python
Python文件夹批处理操作代码实例
Jul 21 Python
Window10上Tensorflow的安装(CPU和GPU版本)
Dec 15 Python
解决Python保存文件名太长OSError: [Errno 36] File name too long
May 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中利用XML技术构造远程服务(上)
2006/10/09 PHP
php静态文件生成类实例分析
2015/01/03 PHP
php实现遍历目录并删除指定文件中指定内容
2015/01/21 PHP
PHP执行linux命令常用函数汇总
2016/02/02 PHP
浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合)
2017/03/14 PHP
slice函数的用法 之不错的应用
2006/12/29 Javascript
ie 调试javascript的工具
2009/04/29 Javascript
JavaScript CSS修改学习第三章 修改样式表
2010/02/19 Javascript
Javascript异步编程的4种方法让你写出更出色的程序
2013/01/17 Javascript
window.showModalDialog参数传递中含有特殊字符的处理方法
2013/06/06 Javascript
js判断客户端是iOS还是Android等移动终端的方法
2013/12/11 Javascript
js实现class样式的修改、添加及删除的方法
2015/01/20 Javascript
AngularJS基础知识笔记之过滤器
2015/05/10 Javascript
JS模拟实现方法重载示例
2016/08/03 Javascript
Javascript函数中的arguments.callee用法实例分析
2016/09/16 Javascript
Ajax的概述与实现过程
2016/11/18 Javascript
DropDownList控件绑定数据源的三种方法
2016/12/24 Javascript
关于Vue实现组件信息的缓存问题
2017/08/23 Javascript
vue+jquery+lodash实现滑动时顶部悬浮固定效果
2018/04/28 jQuery
vue如何将v-for中的表格导出来
2018/05/07 Javascript
element ui table(表格)实现点击一行展开功能
2018/12/04 Javascript
打开电脑上的QQ的python代码
2013/02/10 Python
python使用in操作符时元组和数组的区别分析
2015/05/19 Python
关于Keras模型可视化教程及关键问题的解决
2020/01/24 Python
解决ROC曲线画出来只有一个点的问题
2020/02/28 Python
python实现人脸签到系统
2020/04/13 Python
Python xml、字典、json、类四种数据类型如何实现互相转换
2020/05/27 Python
python读取excel数据并且画图的实现示例
2021/02/08 Python
Ajax和javascript的区别
2013/07/20 面试题
领导的自我鉴定
2013/12/28 职场文书
二手房购房协议书范本
2014/10/05 职场文书
2014年乡镇纪委工作总结
2014/12/19 职场文书
师德先进个人材料
2014/12/20 职场文书
2015年组织部工作总结
2015/04/03 职场文书
2015年公路养护工作总结
2015/05/13 职场文书
gojs实现蚂蚁线动画效果
2022/02/18 Javascript