为什么我们要设置cookie????
- 当我们在京东购物时,我们需要登录账号进入我们的购物车,那京东是如何区别每个用户的呢?原因就在于cookie,就像我们在超市购物,没有会员卡的时候,买完东西超市并不会保存我们的任何信息,如果我们使用会员卡,超市就会有我们的消费信息,cookie就像是会员卡,记录用户的一些信息。
cookie的用途
- 服务器可以利用Cookies包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。Cookies最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是Cookies的功用。
- 另一个重要应用场合是“购物车”之类处理。用户可能会在一段时间内在同一家网站的不同页面中选择不同的商品,这些信息都会写入Cookies,以便在最后付款时提取信息。
- 更重要的是,网站可以利用cookies跟踪统计用户访问该网站的习惯,比如什么时间访问,访问了哪些页面,在每个网页的停留时间等。利用这些信息,一方面是可以为用户提供个性化的服务,另一方面,也可以作为了解所有用户行为的工具,对于网站经营策略的改进有一定参考价值。
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(盐值),这样才能确保网站的正常访问