您的位置:首页 > 编程语言 > Go语言

Django框架会话技术实例分析【Cookie与Session】

2019-05-24 18:03 1841 查看

本文实例讲述了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程序设计有所帮助。

    您可能感兴趣的文章:

    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: