设置cookie之前我们先了解一下cookie,如下图,cookie以键值对的形式存在,
键和值以逗号分隔,不同的键值对以;(分号)隔开。
因此我们设置cookie时,也要以键值对的形式设置.
cookie的设置
- 通过查看源代码我们可以知道cookie中可以设置的参数如下:
def set_cookie(self, key, value='', max_age=None, expires=None, path='/', domain=None, secure=False, httponly=False, samesite=None):
key:键
value:值
max_age:设置过期时间(秒),如果未设置默认关闭浏览器失效
expires:设置过期时间,时间戳的形式(1970离现在的时间)
path:当前主域名
domain:子域名
secure:True true意味着"指示浏览器仅通过 HTTPS 连接传回 cookie。这可以确保 cookie ID 是安全的,且仅用于 使用 HTTPS 的网站。如果启用此功能,则 HTTP 上的会话 Cookie 将不再起作用
httponly=False 设置HttpOnly=true的cookie不能被js获取到,无法用document.cookie打出cookie的内容
实例:response = HttpResponseRedirect('/index/') response.set_cookie('email',user.email,10) return response
cookie的获取
- cookie的获取方法为:response.cookie.get('cookie设置的参数')
下面我们通过一个装饰器来实现cookie的获取def loginValid(fun): def inner(request,*args,**kwargs): cookie = request.COOKIES email = cookie.get('email') if email: return fun(request,*args,**kwargs) else: return HttpResponseRedirect("/login/") return inner @loginValid def index(request): return render_to_response("index.html",locals())
cookie的删除
- cookie的获取方法为:response.delete_cookie方法,指定cookie的key,我们就可以删除cookie了
def delete_cookie(): response = HttpResponseRedirect('/index/') response.delete_cookie('username') #删除cookie return response
cookie的加密
- cookie的加密设置:与上面的cookie的设置相同,关键字不同
response.set_signed_cookie('email',email,salt="salt")
- cookie的获取解密:与上面的cookie的获取相同,关键字不同
responset.get_signed_cookie('email',email,salt="salt")
cookie的加密和解密要对应相同的salt(盐值),这样才能确保网站的正常访问