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发布模块的步骤分享
Feb 21 Python
Python输出PowerPoint(ppt)文件中全部文字信息的方法
Apr 28 Python
python机器学习库常用汇总
Nov 15 Python
python使用pil进行图像处理(等比例压缩、裁剪)实例代码
Dec 11 Python
python+matplotlib实现礼盒柱状图实例代码
Jan 16 Python
python 多维切片之冒号和三个点的用法介绍
Apr 19 Python
python 日志增量抓取实现方法
Apr 28 Python
python在文本开头插入一行的实例
May 02 Python
Python基础之文件读取的讲解
Feb 16 Python
详解python中的数据类型和控制流
Aug 08 Python
Python爬虫之Selenium中frame/iframe表单嵌套页面
Dec 04 Python
python3 使用ssh隧道连接mysql的操作
Dec 05 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
PHP4在Windows2000下的安装
2006/10/09 PHP
PHP实现多条件查询实例代码
2010/07/17 PHP
php采用curl访问域名返回405 method not allowed提示的解决方法
2014/06/26 PHP
PHP实现的蚂蚁爬杆路径算法代码
2015/12/03 PHP
PHP微信红包API接口
2015/12/05 PHP
php强大的时间转换函数strtotime
2016/02/18 PHP
Yii使用smsto短信接口的函数demo示例
2016/07/13 PHP
简单实现php上传文件功能
2017/09/21 PHP
事件绑定之小测试  onclick && addEventListener
2011/07/31 Javascript
js汉字排序问题 支持中英文混排,兼容各浏览器,包括CHROME
2011/12/20 Javascript
JavaScript显示当然日期和时间即年月日星期和时间
2013/10/29 Javascript
jquery获取URL中参数解决中文乱码问题的两种方法
2013/12/18 Javascript
JS获取计算机mac地址以及IP的实现方法
2014/01/08 Javascript
JavaScript中最简洁的编码html字符串的方法
2014/10/11 Javascript
javascript日期格式化方法汇总
2015/10/04 Javascript
jquery zTree异步加载简单实例讲解
2016/02/25 Javascript
JS实现重新加载当前页面或者父页面的几种方法
2016/11/30 Javascript
JS判断鼠标进入容器的方向与window.open新窗口被拦截的问题
2016/12/23 Javascript
使用Angular 6创建各种动画效果的方法
2018/10/10 Javascript
JS脚本实现定时到网站上签到/签退功能
2020/04/22 Javascript
分析在Python中何种情况下需要使用断言
2015/04/01 Python
pygame学习笔记(3):运动速率、时间、事件、文字
2015/04/15 Python
查看Python安装路径以及安装包路径小技巧
2015/04/28 Python
python实现给scatter设置颜色渐变条colorbar的方法
2018/12/13 Python
Python编程中flask的简介与简单使用
2018/12/28 Python
PyCharm在新窗口打开项目的方法
2019/01/17 Python
Python实现的删除重复文件或图片功能示例【去重】
2019/04/23 Python
python-opencv获取二值图像轮廓及中心点坐标的代码
2019/08/27 Python
HTML5页面嵌入小程序没有返回按钮及返回页面空白的问题
2020/05/28 HTML / CSS
美国领先的精品家居照明和装饰产品在线零售商:LightsOnline.com
2018/01/23 全球购物
小学生作文批改评语
2014/12/25 职场文书
拾金不昧感谢信范文
2015/01/21 职场文书
幼儿园小班个人总结
2015/02/12 职场文书
2015庆祝七一建党节94周年活动总结
2015/03/20 职场文书
mysql部分操作
2021/04/05 MySQL
MySQL 使用自定义变量进行查询优化
2021/05/14 MySQL