django之cookie

发布于:2022-10-29 ⋅ 阅读:(336) ⋅ 点赞:(0)

简要

cookie以明文的形式保存在浏览器中
学习cookie:CRUD、加盐cookie、签名cookie

CRUD

### 设置修改删除cookie都是基于响应对象来实现的(HttpResponse),获取cookie是基于请求对象(WSGiRequest)实现的
​
​
### 设置修改cookie
    ## set_cookie
    resp.set_cookie(self,key,value="",max_age=None,expires=None,path="/",
               domain=None,secure=False,httponly=False,samesite=None,)
    key:键
    value:值
    max_age:int,设置存储时长,到期删除,单位为秒
    expires:datetime/datetime_str,设置到期时间,会根据到期时间计算出max_age
    domain:str,设置使用域,cookie被跨域读取时需要被设置
    secure:限制https协议下才会被读取到
    httponly:限制客户端脚本访问cookie
    samesite:None即随着所有的同站和跨站请求而发送cookie,Strict即跨域请求时不发送cookie
    # 若max_age和expires同时存在, 则默认使用max_age
​
    ## set_signed_cookie
    ## 该用法和cookie用法基本相同,仅多了个salt参数
    resp.set_signed_cookie(self, key, value, salt="", **kwargs) -> set_cookie(key, value,**kwargs)
    salt:str,加盐(字符串)来增加cookie的复杂度从而来增强秘钥强度
    
    
###  删除cookie
    resp.delete_cookie(key)                   # 删除普通cookie
    resp.set_signed_cookie(key,None,max_age=0)  # 删除加盐cookie
​
    
## 获取cookie
    req.get_cookie(key)             # 获取普通cookie
    req.get_signed_cookie(key)      # 获取加盐cookie

加盐cookie

如上已提到加盐,加盐(字符串)来增加签名cookie的复杂度从而来增强秘钥强度,加盐通过设置salt参数即可,可以通过给定salt一个自定义的复杂的字符串来增加加密时的复杂度。

签名cookie

### 功能:
    cookie签名是为了防止客户端cookie数据被恶意篡改,为数据生成一个特有的签名;
​
### 机制:
    当第一次发送请求时,去设置签名cookie,【cookie数据】和【其签名】会存储到浏览器中;当浏览器下次请求时,请求中是携带cookie数据的,后端处理请求,将【cookie数据】通过签名算法生成签名,并与浏览器的存储签名进行比对,如果和浏览器中的不一致,则代表数据被修改了,不予通过响应。
    从这个过程中,不难看出签名cookie用的是对称秘钥原理。

网站公告

今日签到

点亮在社区的每一天
去签到