cookie
什么是cookie
- 指服务器为了辨别用户身份、进行session跟踪而存储在用户本地终端上的数据,通常经过加密,是一小段的文本信息。
cookie的机制
- cookie是一种会话跟踪的机制。由于HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。要跟踪该会话,必须引入一种机制。Cookie就是这样的一种机制。它可以弥补HTTP协议无状态的不足。其实本质上cookies就是http的一个扩展。
特点
- 存储在客户端的
- 不可跨域名性
- 可以实现跨页面全局变量
- 键值对的形式存储
- 可设置过期时间
- 大小一般不超过10kb
- 安全性低
作用
- 与session进行交互
- 记住登录状态,实现自动登录
- 记录用户访问次数
- 记录用户浏览信息,分析用户爱好习惯
分类
-
会话cookie
- 会话cookie是指在不设定它的生命周期expires时的状态,随着客户端的关闭而销毁。
-
持久cookie
- 持久cookie则是设定了它的生命周期expires,关闭客户端之后,它不会销毁,直到设定的过期时间。对于持久cookie,可以在同一个客户端中传递数据,因为cookie自动将数据传送到服务器端。
使用cookie记住用户名
from ... import ...
...
class LoginView(View):
"""登录"""
def post(self, request):
"""登录校验"""
# 接收参数
# 校验参数
# 业务处理
# 登录校验
user = authenticate(username=username, password=password)
if user is not None:
# 用户名密码正确
if user.is_active:
# 用户已激活,记住登录状态
login(request, user)
response = redirect(reverse('goods:index'))
# 接收remember的值
remember = request.POST.get("remember")
# 判断是否需要记住用户名
if remember == "on":
response.set_cookie("username", username, max_age=3600*24*7)
else:
response.delete_cookie("username")
else:
# 用户未激活
return render(request, "login.html", {"errmsg": "用户未激活"})
else:
# 用户名或密码错误
return render(request, "login.html", {"errmsg": "用户名或密码错误"})