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按照多个字符对字符串进行分割的方法
Mar 17 Python
使用Python程序抓取新浪在国内的所有IP的教程
May 04 Python
在Python中用keys()方法返回字典键的教程
May 21 Python
python中异常报错处理方法汇总
Nov 20 Python
Python下载网络文本数据到本地内存的四种实现方法示例
Feb 05 Python
Python对HTML转义字符进行反转义的实现方法
Apr 28 Python
用Python徒手撸一个股票回测框架搭建【推荐】
Aug 05 Python
django rest framework serializer返回时间自动格式化方法
Mar 31 Python
python用什么编辑器进行项目开发
Jun 17 Python
keras的backend 设置 tensorflow,theano操作
Jun 30 Python
python如何控制进程或者线程的个数
Oct 16 Python
PYTHON基于Pyecharts绘制常见的直角坐标系图表
Apr 28 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英文字母大小写转换函数小结
2014/05/03 PHP
Eclipse的PHP插件PHPEclipse安装和使用
2014/07/20 PHP
PHP实用函数分享之去除多余的0
2015/02/06 PHP
php版微信公众平台入门教程之开发者认证的方法
2016/09/26 PHP
PHP 验证身份证是否合法的函数
2017/02/09 PHP
extjs 学习笔记 四 带分页的grid
2009/10/20 Javascript
url地址自动加#号问题说明
2010/08/21 Javascript
得到jQuery detach()后节点中的某个值实现代码
2013/02/05 Javascript
jquery中常用的SET和GET$(”#msg”).html循环介绍
2013/10/09 Javascript
jQuery实现带滚动线条导航效果的方法
2015/01/30 Javascript
javascript中加var和不加var的区别 你真的懂吗
2016/01/06 Javascript
js重写方法的简单实现
2016/07/10 Javascript
js计算系统当前日期是星期几的方法
2016/07/14 Javascript
详解AngularJS 路由 resolve用法
2017/04/24 Javascript
jquery实现用户登陆界面(示例讲解)
2017/09/06 jQuery
详解vue axios中文文档
2017/09/12 Javascript
浅谈基于Vue.js的移动组件库cube-ui
2017/12/20 Javascript
小程序封装wx.request请求并创建接口管理文件的实现
2019/04/29 Javascript
Fetch超时设置与终止请求详解
2019/05/18 Javascript
TypeScript 引用资源文件后提示找不到的异常处理技巧
2020/07/15 Javascript
[10:21]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster 选手采访
2021/03/11 DOTA
python发送邮件示例(支持中文邮件标题)
2014/02/16 Python
Bottle框架中的装饰器类和描述符应用详解
2017/10/28 Python
python初学之用户登录的实现过程(实例讲解)
2017/12/23 Python
微信跳一跳python辅助脚本(总结)
2018/01/11 Python
python寻找list中最大值、最小值并返回其所在位置的方法
2018/06/27 Python
python pprint模块中print()和pprint()两者的区别
2020/02/10 Python
python ffmpeg任意提取视频帧的方法
2020/02/21 Python
python中spy++的使用超详细教程
2021/01/29 Python
迷你西餐厅创业计划书范文
2013/12/31 职场文书
会计专业求职信范文
2014/03/16 职场文书
环保志愿者活动总结
2014/06/27 职场文书
公务员爱岗敬业演讲稿
2014/08/26 职场文书
学校党员干部承诺书
2015/05/04 职场文书
2015年度学校应急管理工作总结
2015/10/22 职场文书
2016年大学生党员承诺书
2016/03/24 职场文书