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中文件操作简明介绍
Apr 13 Python
python中使用%与.format格式化文本方法解析
Dec 27 Python
python画折线图的程序
Jul 26 Python
Django数据库类库MySQLdb使用详解
Apr 28 Python
Window10下python3.7 安装与卸载教程图解
Sep 30 Python
Python TCP通信客户端服务端代码实例
Nov 21 Python
python 回溯法模板详解
Feb 26 Python
python实现密码强度校验
Mar 18 Python
Python开发之身份证验证库id_validator验证身份证号合法性及根据身份证号返回住址年龄等信息
Mar 20 Python
python等待10秒执行下一命令的方法
Jul 19 Python
python实现磁盘日志清理的示例
Nov 05 Python
基于Python的EasyGUI学习实践
May 07 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下载excel无法打开的解决方法
2013/12/24 PHP
PHP实现Soap通讯的方法
2014/11/03 PHP
学习php设计模式 php实现模板方法模式
2015/12/08 PHP
PHP信号处理机制的操作代码讲解
2019/04/19 PHP
用tip解决Ext列宽度不够的问题
2008/12/13 Javascript
window.location和document.location的区别分析
2008/12/23 Javascript
几个常用的JavaScript字符串处理函数 - split()、join()、substring()和indexOf()
2009/06/02 Javascript
JavaScript设计模式之单件模式介绍
2014/12/28 Javascript
JavaScript实现同时调用多个函数的方法
2015/11/09 Javascript
JavaScript中用let语句声明作用域的用法讲解
2016/05/20 Javascript
Js动态设置rem来实现移动端字体的自适应代码
2016/10/14 Javascript
Angular2表单自定义验证器的实现
2016/10/19 Javascript
原生js实现放大镜
2017/02/20 Javascript
vue项目如何刷新当前页面的方法
2018/05/18 Javascript
微信小程序实现左右联动的实战记录
2018/07/05 Javascript
详解vue为什么要求组件模板只能有一个根元素
2019/07/22 Javascript
解决vue+elementui项目打包后样式变化问题
2020/08/03 Javascript
AJAX XMLHttpRequest对象创建使用详解
2020/08/20 Javascript
[01:13:59]LGD vs Mineski Supermajor 胜者组 BO3 第三场 6.5
2018/06/06 DOTA
[03:43]TI9战队采访——PSG.LGD
2019/08/22 DOTA
Python中unittest用法实例
2014/09/25 Python
python去除所有html标签的方法
2015/05/05 Python
Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享
2016/07/04 Python
Python 实现链表实例代码
2017/04/07 Python
Python基于QRCode实现生成二维码的方法【下载,安装,调用等】
2017/07/11 Python
python抓取京东小米8手机配置信息
2018/11/13 Python
python使用response.read()接收json数据的实例
2018/12/19 Python
mac系统下Redis安装和使用步骤详解
2019/07/09 Python
Pandas读取csv时如何设置列名
2020/06/02 Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
2020/07/03 Python
《只有一个地球》教学反思
2014/02/14 职场文书
机械专业求职信
2014/05/25 职场文书
药品营销策划方案
2014/06/15 职场文书
2016年劳模先进事迹材料
2016/02/25 职场文书
python如何进行基准测试
2021/04/26 Python
宝塔更新Python及Flask项目的部署
2022/04/11 Python