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 SQLite3数据库操作类分享
Jun 10 Python
python使用PyGame模块播放声音的方法
May 20 Python
python判断一个集合是否包含了另外一个集合中所有项的方法
Jun 30 Python
对python中return和print的一些理解
Aug 18 Python
详解Python map函数及Python map()函数的用法
Nov 16 Python
python获取命令行输入参数列表的实例代码
Jun 23 Python
解决Pycharm运行时找不到文件的问题
Oct 29 Python
python绘制热力图heatmap
Mar 23 Python
简单了解django索引的相关知识
Jul 17 Python
python树的同构学习笔记
Sep 14 Python
详解python statistics模块及函数用法
Oct 27 Python
Python3利用scapy局域网实现自动多线程arp扫描功能
Jan 21 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导出oracle库的php代码
2009/04/20 PHP
php 空格,换行,跳格使用说明
2009/12/18 PHP
下拉列表多级联动dropDownList示例代码
2013/06/27 PHP
php通过session防url攻击方法
2014/12/10 PHP
PHP实现用户登录的案例代码
2018/05/10 PHP
JavaScript DOM 学习第七章 表单的扩展
2010/02/19 Javascript
javascript用户注册提示效果的简单实例
2013/08/17 Javascript
javascript跨域的4种方法和原理详解
2014/04/08 Javascript
D3.js 从P元素的创建开始(显示可加载数据)
2014/10/30 Javascript
SpringMVC返回json数据的三种方式
2015/12/10 Javascript
JavaScript开发者必备的10个Sublime Text插件
2016/02/27 Javascript
jQuery中Chosen三级联动功能实例代码
2017/03/07 Javascript
微信小程序引用公共js里的方法的实例详解
2017/08/17 Javascript
php 解压zip压缩包内容到指定目录的实例
2018/01/23 Javascript
VUEX采坑之路之获取不到$store的解决方法
2019/11/08 Javascript
在vue中动态修改css其中一个属性值操作
2020/12/07 Vue.js
javascript 数组(list)添加/删除的实现
2020/12/17 Javascript
[04:22]DOTA2上海特级锦标赛主赛事第四日TOP10
2016/03/06 DOTA
合并Excel工作薄中成绩表的VBA代码,非常适合教育一线的朋友
2009/04/09 Python
python检测远程服务器tcp端口的方法
2015/03/14 Python
浅谈python中的getattr函数 hasattr函数
2016/06/14 Python
python使用生成器实现可迭代对象
2018/03/20 Python
Python系统监控模块psutil功能与经典用法分析
2018/05/24 Python
Python爬取个人微信朋友信息操作示例
2018/08/03 Python
Django 大文件下载实现过程解析
2019/08/01 Python
python opencv如何实现图片绘制
2020/01/19 Python
python实现QQ邮箱发送邮件
2020/03/06 Python
解决c++调用python中文乱码问题
2020/07/29 Python
Pycharm学生免费专业版安装教程的方法步骤
2020/09/24 Python
聪明的粉丝购买门票的地方:TickPick
2018/03/09 全球购物
儿科护士自我鉴定
2013/10/14 职场文书
2014幼儿园小班工作总结
2014/11/10 职场文书
新员工辞职信范文
2015/05/12 职场文书
篮球赛新闻稿
2015/07/17 职场文书
社区服务理念口号
2015/12/25 职场文书
节水宣传标语口号
2015/12/26 职场文书