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 相关文章推荐
在Django中同时使用多个配置文件的方法
Jul 22 Python
详解Python中的array数组模块相关使用
Jul 05 Python
基于Python的XSS测试工具XSStrike使用方法
Jul 29 Python
Python中的is和==比较两个对象的两种方法
Sep 06 Python
Django的HttpRequest和HttpResponse对象详解
Jan 26 Python
python批量读取txt文件为DataFrame的方法
Apr 03 Python
python之pyqt5通过按钮改变Label的背景颜色方法
Jun 13 Python
python设置环境变量的作用和实例
Jul 09 Python
python pyenv多版本管理工具的使用
Dec 23 Python
浅谈tensorflow之内存暴涨问题
Feb 05 Python
Python使用Numpy模块读取文件并绘制图片
May 13 Python
Python新手学习raise用法
Jun 03 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 使用post,get的一种简洁方式
2010/04/25 PHP
PHP Directory 函数的详解
2013/03/07 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
php pdo连接数据库操作示例
2019/11/18 PHP
js 页面执行时间计算代码
2009/03/04 Javascript
JavaScript类型转换方法及需要注意的问题小结(挺全面)
2010/11/11 Javascript
Jquery Ajax的Get方式时需要注意URL地方
2011/04/07 Javascript
JS Range HTML文档/文字内容选中、库及应用介绍
2011/05/12 Javascript
Javascript创建自定义对象 创建Object实例添加属性和方法
2012/06/04 Javascript
js中reverse函数的用法详解
2013/12/26 Javascript
jquery动态改变div宽度和高度
2015/02/09 Javascript
Jquery中基本选择器用法实例详解
2015/05/18 Javascript
js实现文字在按钮上滚动的方法
2015/08/20 Javascript
jQuery绑定事件监听bind和移除事件监听unbind用法实例详解
2016/01/19 Javascript
JS实现求数组起始项到终止项之和的方法【基于数组扩展函数】
2017/06/13 Javascript
基于EasyUI的基础之上实现树形功能菜单
2017/06/28 Javascript
基于js的变量提升和函数提升(详解)
2017/09/17 Javascript
JS中promise化微信小程序api
2018/04/12 Javascript
vue 优化CDN加速的方法示例
2018/09/19 Javascript
Python logging模块学习笔记
2014/05/24 Python
详解Python的Django框架中inclusion_tag的使用
2015/07/21 Python
python+pyqt实现12306图片验证效果
2017/10/25 Python
在scrapy中使用phantomJS实现异步爬取的方法
2018/12/17 Python
从0开始的Python学习016异常
2019/04/08 Python
Python调用Windows命令打印文件
2020/02/07 Python
拉夫劳伦爱尔兰官方网站:Ralph Lauren爱尔兰
2020/04/10 全球购物
德国玩具商店:Planet Happy DE
2021/01/16 全球购物
Wiggle澳大利亚:自行车、跑步、游泳商店
2020/11/07 全球购物
大学生学习自我评价
2014/01/13 职场文书
迟到检讨书500字
2014/02/05 职场文书
2015年国庆节活动总结
2015/03/23 职场文书
2016教师节问候语
2015/11/10 职场文书
教师读书活动心得体会
2016/01/14 职场文书
新手必备之MySQL msi版本下载安装图文详细教程
2021/05/21 MySQL
PHP实现rar解压读取扩展包小结
2021/06/03 PHP
Spring Data JPA使用JPQL与原生SQL进行查询的操作
2021/06/15 Java/Android