django 生成cookie
Cookie的作用是为了识别当前用户的身份,当前用户访问服务器后,服务器会根据用户信息生成session(会话),然后将session保存cookie中,并响应给用户。用户再下次访问时带上cookie信息提交给服务器,服务器拿到cookie里面的session解密出来相关信息,确认当前访问的用户是同一个用户,再才能进行后续的业务操作。大致如此!
而Django提供以下方式来操作cookie对象:
#获取Cookie,与python的字典读取方式一致 request.COOKIES("uuid") request.COOKIES.get("uuid") #在响应内容中添加cookie,将cookie返回给浏览器 return HttpResponse("hello world") response.set_cookie("key","value") return response #在响应内容中删除cookie return HttpResponse("Hello world") response.delete_cookie("key") return response
简而言之,操作cookie对象无非就是对cookie的获取、添加、删除处理。添加cookie信息是使用set_cookie方法实现的,该方法是由响应类HttpResponseBase定义。
set_cookie方法定义了9个函数参数,每个参数的说明如下:
- key 设置cookie的key,类似字典的key。
- value 设置cookie的value,类似字典的value。
- max_age 设置cookie的有效时间,以秒为单位。
- expires 设置cookie的有效时间,以日期格式为单位。
- path 设置cookie的生效路径,默认值为根目录(网站首页)。
- domain 设置cookie生效的域名。
- secure 设置传输方式,若为False,则使用HTTP,否则使用HTTPS。
- httponly 设置是否只能使用HTTP协议传输。
- samesite 设置强制模式,可选值为lax或strict,主要防止CSRF攻击。
set_cookie 设置cookie时,value的值是需要自己加密的,cookie直接显示value的内容,如下:
def create_cookie(request): r = redirect(reverse("myApp:index")) #添加cookie r.set_cookie("uid","cookie_value") print(r) return r
在浏览器中,cookie的值直接显示:cookie_value的内容,这种是非常不安全的,用户的信息被截取后就完全暴露出去了。因此,使用set_cookie进行设置时,需要自行对cookie的value值进行加密。
在django中内置Cookie的加密方法可以使用set_signed_cookie方法,set_signed_cookie的参数如下:
- key 设置cookie的key,类似字典的key。
- value 设置cookie的value,类似字典的value。
- salt 设置加密盐,用于数据的加密处理。
- **kwargs 设置可选参数,用于设置set_cookie 的参数。
下面是set_signed_cookie 的使用效果:
def create_cookie(request): r = redirect(reverse("myApp:index")) #设置cookie的有效时间为10秒 r.set_signed_cookie("uuid","uid",salt="myJc",max_age=10) print(r) return r
在浏览器中的效果如下: