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

在浏览器中的效果如下:

 

posted @ 2022-04-12 23:38  西夏一品唐  阅读(269)  评论(0编辑  收藏  举报