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中使用next()方法操作文件的教程
May 24 Python
关于Python面向对象编程的知识点总结
Feb 14 Python
Django实现组合搜索的方法示例
Jan 23 Python
Python常见字符串操作函数小结【split()、join()、strip()】
Feb 02 Python
教你利用Python玩转histogram直方图的五种方法
Jul 30 Python
Python3实现汉语转换为汉语拼音
Jul 08 Python
Python关于反射的实例代码分享
Feb 20 Python
Python序列化pickle模块使用详解
Mar 05 Python
django跳转页面传参的实现
Sep 17 Python
Python学习工具jupyter notebook安装及用法解析
Oct 23 Python
解决PDF 转图片时丢文字的一种可能方式
Mar 04 Python
用python删除文件夹中的重复图片(图片去重)
May 12 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
PHPnow安装服务[apache_pn]失败的问题的解决方法
2010/09/10 PHP
通过php快速统计某个数据库中每张表的数据量
2012/09/04 PHP
php 生成唯一id的几种解决方法
2013/03/08 PHP
php 读取文件头判断文件类型的实现代码
2013/08/05 PHP
使用新浪微博API的OAuth认证发布微博实例
2015/03/27 PHP
PHP实现基于面向对象的mysqli扩展库增删改查操作工具类
2017/07/18 PHP
php高清晰度无损图片压缩功能的实现代码
2018/12/09 PHP
get(0).tagName获得作用标签示例代码
2014/10/08 Javascript
jquery实现定时自动轮播特效
2015/12/10 Javascript
javascript比较语义化版本号的实现代码
2016/09/09 Javascript
JS实现多级菜单中当前菜单不随页面跳转样式而发生变化
2017/05/30 Javascript
JavaScript如何获取到导航条中HTTP信息
2017/10/10 Javascript
js中this的指向问题归纳总结
2018/11/28 Javascript
JS实现的获取银行卡号归属地及银行卡类型操作示例
2019/01/08 Javascript
简单了解JavaScript中的执行上下文和堆栈
2019/06/24 Javascript
vue实现在线预览pdf文件和下载(pdf.js)
2019/11/26 Javascript
Python设计模式之单例模式实例
2014/04/26 Python
Python中的自省(反射)详解
2015/06/02 Python
CentOS 7下安装Python 3.5并与Python2.7兼容并存详解
2017/07/07 Python
运动检测ViBe算法python实现代码
2018/01/09 Python
Python元组拆包和具名元组解析实例详解
2018/03/26 Python
详解用python自制微信机器人,定时发送天气预报
2019/03/25 Python
python添加菜单图文讲解
2019/06/04 Python
Django restframework 框架认证、权限、限流用法示例
2019/12/21 Python
python 最简单的实现适配器设计模式的示例
2020/06/30 Python
Python如何对齐字符串
2020/07/30 Python
Python configparser模块封装及构造配置文件
2020/08/07 Python
Dower & Hall官网:英国小众轻奢珠宝品牌
2019/01/31 全球购物
招聘与培训专员岗位职责
2014/01/30 职场文书
优秀中学生事迹材料
2014/01/31 职场文书
高等教育专业自荐信范文
2014/03/26 职场文书
爱之链教学反思
2014/04/30 职场文书
学校创先争优活动总结
2014/08/28 职场文书
本溪水洞导游词
2015/02/11 职场文书
python中print格式化输出的问题
2021/04/16 Python
如何创建一个创建MySQL数据库中的datetime类型
2022/03/21 MySQL