django框架之饼干/会话的使用示例(小结)

  

  

http协议没有提供多次请求之间的关联功能,协议的本意也并未考虑到多次请求之间的状态维持,每一次请求都被协议认为是一次性的。但在某些场景下,如一次登录多次访问,我们希望可以保存登录状态,协议并没有直接提供会话跟踪的支持,需要靠其他手段来帮助实现目标。

  

  

<强> 1,对饼干的理解

  
      <李>饼干是一个键值的数据结构(类似python字典),用于保存需要维护状态的数据,饼干与会话最大的区别是饼干的数据保存在客户端,而会话把数据保存在服务端。   <李>饼干一般由服务器设置,并可以存放在http的请求头和响应头中。   <李>饼干由浏览器保存,浏览器已经实现了饼干的保存和发送,而服务器上对饼干的设置和接收则需要我们配置。   <李>通过饼干,可以在多个会话之间共享一些必要的信息如登录状态数据,历史访问记录,个性化定制设置等,以实现会话跟踪,让用户感觉到网站可以“记录”自己的偏好,减少不必要的重复输入,从而提升用户体验。   
  

<强> 2,饼干的使用接口

  

django的服务端发送响应有三种方式:
  1. 返回HttpResponse ()
  2. 返回渲染()
  3.返回重定向()

  

这三种方法实例化的结果都是HttpResponse类的实例,可以直接用于设置饼干。
  

  

在响应对象上执行set_cookie(价值,关键…)即可设置cookie,其中特别注意饼干属性的设置。

  

<强>饼干的设置
  

  

服务器在响应对象上进行set_cookie操作,一旦设置完成,客户端后续的请求就可以根据饼干的属性规则携带饼干数据。
  

        def set_cookie(键,值=",max_age=,=没有到期,路径='/',   域=,=False, httponly=False, samesite=None)      

<强>饼干的获取
  

  

服务器在请求对象上通过请求。饼干得到饼干字典数据,注意此处拿到的饼干数据从安全性来说是未被验证正确性的。
  

        @cached_property   def饼干(自我):   raw_cookie=get_str_from_wsgi(自我。环境,‘HTTP_COOKIE’,”)   返回parse_cookie (raw_cookie)   之前      

注意1:饼干在设置的时候可以设置它被发送的范围,每个饼干都有对应的域名+路径的属性,这约束了饼干发送范围,只有当http的请求落在此范围中的url,才会携带此饼干。

  

注意2:一个饼干就是一个键值项,不过它还携带有属性。一个饼干是一个字典,保存了很多饼干项,注意单个饼干项和整个饼干字典的关系。

  

<强> 3,饼干的属性
  

  

max_age:
  失效延迟时间,单位是秒,设置成15秒意味着在设置完之后的15秒之内,此cookie有效,超时之后饼干失效,浏览器会删除失效的饼干。此参数默认是None,代表着直到浏览器关闭,即默认是会话饼干。
  注意:如果max_age是0,意味着让浏览器立刻删除此cookie,即此cookie即刻失效。
  

  

到期:
  指定失效日期,同样用于失效cookie,只不过是另一种时间指定方式。
  

  域:


  此cookie可以被使用的域名范围。
  

  

路径:
  与域配合着使用,默认是根路径'/',意味着在当前域范围下任何url都会携带此饼干。可以主动设置其他的路径以缩小发送的范围,从而约束某一个cookie项只应用于某些url。
  

  

安全:
  默认是假,一般配合https协议使用,在https协议下,只有安全属性是真正的饼干才允许被发送。
  

  

httponly:
  默认是假的,这意味着js也可以通过。来访问和设置此cookie,而如果设置为真,则代表只允许服务端来访问和设置此饼干。

  

<强> 4,使用饼干的问题

  

<强>饼干的安全性问题
  

  

服务器是根据客户端发送过来的饼干进行状态判断,这种保存在客户端的饼干数据非常容易修改和伪装,服务器基本无法知晓饼干的正确性,也就不信能100%任饼干的数据。
  

  

此外,饼干很容易被盗取,如果客户端饼干里面包含私密数据的话,就更不安全了。

  

<强>饼干的覆盖问题
  

  

在服务端上设置的新的cookie会让客户端更新本地饼干。

  

<强>饼干的合理性问题

django框架之饼干/会话的使用示例(小结)