cookies 和 session 都不懂还说会 django?

谈谈 cookies 和 session

因为HTTP协议是无状态的,导致会话状态难以保持。Cookies和Session就是为了保持会话状态而诞生的两个存储技术。

  • cookies和session的区别:

    1. Cookie 把数据存放在客户的浏览器上,Session 把数据放在服务器上(数据库里)。
    2. 因为cookies有自动提交的特点,把数据存在浏览器上,别人可以利用这一点进行 csrf 攻击。从安全角度考虑,建议使用session。
    3. 因为Session 在一定时间内会保存在服务器上。当访问增多,会比较占用服务器的性能,从要减轻服务器性能方面考虑,建议使用 Cookie。
    4. 单个 Cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个 Cookie。
    5. 可以考虑将登陆信息等重要信息存放为 Session,其他信息如果需要保留,可以放在 Cookie 中。
  • cookies和session的关系:

    虽然 session 相对于 cookies 安全一些,但是禁用 Cookie 就不能得到 Session了。因为 Session 是用 Session ID 来确定当前对话所对应的服务器 Session,而 Session ID 是通过 Cookie 来传递的,禁用 Cookie 相当于失去了 SessionID,也就得不到 Session。

  • django 中 sessionid 的存储位置?

    django 将 sessionid 存储在表 django_session 中,当用户群体很大时,mysql可能就会扛不住了,可以每晚执行 python3 manage.py clearsessions 【该命令可删除已过期的session数据】

  • 禁用cookies,还想使用session的方案?

    1. 通过 Url 重写(可以在地址栏看到 sessionid=KWJHUG6JJM65HS2K6 之类的字符串)
    2. 表单隐藏字段的方式将 SessionId 传回给服务器,以便服务通过 SessionId 获取客户端对应的 Session。
  • 怎么删除 cookies 和 session?

    1. 清除所有会话,在存储中删除值部分

      request.session.clear()
      
    2. 清除会话数据,在存储中删除会话的整条数据。

      request.session.flush()
      
    3. 删除会话中的指定键及值,在存储中只删除某个键及对应的值。

      del request.session['键']
      
    4. 设置会话的超时时间,如果没有指定过期时间则两个星期后过期。

      如果 value 是一个整数,会话将在 value 秒没有活动后过期。

      如果 value 为 0,那么用户会话的 Cookie 将在用户的浏览器关闭时过期。

      如果 value 为 None,那么会话永不过期

      request.session.set_expiry(value)
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值