014 Django cookies 和 session

cookie 和 session

cookies 的特点

  • cookies在浏览器上是以键 - 值对的形式进行存储的,键和值都是以ASCII字符串的形存储(不能是中文字符串)
  • 存储的数据带有生命周期
  • cookies中的数据是按域存储隔离的,不同的域之间无法访问
  • cookies的内部的数据会在每次访问此网址时都会携带到服务器端,如果cookies过大会降低响应速度

Cookies 的使用 - 存储

HttpResponse.set_cookie(key,value= , max_age=None,expires=Noe)

  • 参数说明
    • key: cookies 的名字
    • value: cookies 的值
    • max_age:cookie 存活时间,单位为秒
    • expires:具体过期时间
    • 当不指定 max_age 和 expires 的时候,关闭浏览器的时候自动失效
def set_cookies(requests):
    resp = HttpResponse("Cookies 设置成功")
    # 名字 ,值,存活时间
    resp.set_cookie("uuname", "bemake", 500)
    return resp

image-20220625160532303

Cookies 的使用 - 删除和获取

删除 Cookies

  • HttpResponse.delete_cookie(key)
    • 删除指定 key 的 Cookie, 如果 key 不存在那么什么都不会发生

获取 Cookies

  • 通过 request.COOKIES绑定的字典获取客户端的 COOKIES 数据

    • value = request.COOKIES.get("cookies的名字","默认值")
      
    • def show_cookie(request):
          resp = request.COOKIES.get("uuname")
          
          return HttpResponse(f'当前的 cookies 为 {resp}')
      
    • image-20220625160854992

session

  • 我们客户端来向我们的服务端请求开辟存储空间,我们服务端给他开了一个空间以后,分配客户端一个 sessionid ,之后我们的用户来我们的服务端我们就可以凭借这个 sessionid 来分辨到底是哪个人正在访问,同时避免了 cookies 过大导致用户打开网页时长太慢(因为数据存储在服务器)
  • session是在服务器上开辟一段空间用于保留浏览器和服务器交互时的重要数据
    实现方式
    • 使用session需要在浏览器客户端启动cookie,且在cookie中存储sessionid
    • 每个客户端都可以在服务器端有一个独立的Session
    • 注意:不同的请求者之间不会共享这个数据,与请求者一一对

初始配置

  • 在 settings.py 中配置 session

    • image-20220625162918476
  • 向 MIDDLEWARE 列表中添加

    • image-20220625162942995
  • 以上这两个默认都是开启的

session 的使用

  • session 对象是一个类似于字典的 SessionStore 类型的对象,可以用类似字典的方式进行操作

  • session 可能存储字符串,整形,字典,列表等

    • 保存 session 的值到服务器

      • request.session["KEY"] = VALUE
        
      • def set_session(request):
            request.session["key"] = "bemake"
            return HttpResponse("session 设置成功")
        
      • image-20220625164210363

    • 获取 session 的值

      • value = request.session["KEY"]
        value = request.session.get("KEY",默认值)
        
      • def show_session(request):
            value = request.session.get('key','None')
            return HttpResponse(f"当前我们的 session 是 {value}")
        
      • image-20220625164231056

    • 删除 session

      • del request,session["KEY"]
        

session 的设置

  • settings.py 中的相关配置项
    • SESSION_COOKIE_AGE
      • 作用:
        • 指定 sessionid 在 cookies 中保存的时间(默认为两周)
        • 例如: SESSION_COOKIE_AGE = 60*60*24*7*7(单位:秒)
    • SESSION_EXPIRE_AT_BROWSER_CLOSE = True / False
      • 作用:
        • 设置是否只要浏览器关闭 session 就失效(默认为 False)
  • Django 中的 Session 数据存储在数据库中,所以使用 session 前需要确保已经执行过 migrate

session 清除过期数据

  1. django_session表是单表设计

  2. 该表数据量会持续增加导致我们数据库越来越大[浏览器故意删掉sessionid&过期数据未删除]

  3. 可以每晚执行python3 manage.py clearsessions[该命令可删除已过期的session数据]

Cookies 和 Session 对比

种类存储安全性
Cookies浏览器相对不安全
session服务器相对安全
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值