背景介绍
http请求是一个无状态的,无法记录用户身份的。我们需要一个记录用户身份的机制,最早出现的就是cookie
cookie
什么是cookie
cookie是由服务器下发到用户,保存在用户的浏览器上面的,用来标识或者记录用户身份的机制。也是django的一种会话机制
优点
会话机制,从根本上解决了用户持续访问的问题
缺点
cookie 保存在浏览器上面,不安全,cookie 容易被修改,被模仿,可以被解读。
从登陆功能认识cookie
- html页面,提供输入用户名,密码
- 视图:
- 校验用户的身份密码是否正确,是否一致。
- 正确:返回登录成功提示,并跳转对应的页面。同时下发cookie,保存在浏览器上。
- 错误:返回账号或密码不正确的提示信息
- 再次访问:携带cookie 访问,视图校验cookie
from django.http import JsonResponse,HttpResponse,HttpResponseRedirect
def login(request):
## 登录
if request.method == "POST":
username = request.POST.get("username")
password = request.POST.get("password")
if username and password:
user = User.objects.filter(name = username,
password = setPassword(password)).first()
if user:
## 登录成功
return HttpResponseRedirect("/index")
else:
# 登录失败,重定向到首页
return HttpResponseRedirect("/login")
else:
return HttpResponse("参数为空")
return render(request,"login.html")
cookie的使用
-
设置cookie
response.set_cookie('key',value) response.set_cookie('username',name) response.set_cookie('password',password)
-
cookie的参数
key | cookie 的键 |
---|---|
value | 值,key对应的参数值 |
max_age | 有效期,cookie有效的最长时间 |
expires | cookie 的超时时间,和max_age冲突,选一个即可 |
path=’/’ | cookie 起作用的范围 |
domain | cookie 起作用的域名 |
secure=False | True:使用https传递cookie ,False:使用http传递cookie |
httponly=False | True:只用http 传递cookie |
samesite=None | 相同的网站使用 cookie |
-
获取cookie
代码:
request.COOKIES.get('username')
-
删除cookie
退出登录的删除cookiedef logout(request): response = HttpResponseRedirect('/login') response.delete_cookie('username') # 删除cookie return response
session
特点
session 为了解决cookie 不安全的特性,而出现的session 会话机制
session 需要依赖cookie 下发,但是下发的session_id,session 保存在服务器上面,经常保存在数据库当中
web 中session 叫会话机制,是一种相对安全的保存用户信息,校验用户身份的一种机制
会话:只一次通信从开始到结束
session 和cookie 的区别
- cookie放在浏览器上面
- session 放在服务器上面,一般保存在数据库当中
- 校验cookie速度快
- 校验session 速度慢,但是安全性相对高
session操作
-
设置session
session是类字典对象,可以像字典一样去使用session
代码:request.session["username"] = username
-
session 的获取
代码:username_session = request.session.get("username")
-
session 的删除
def logout(request): response = HttpResponseRedirect('/login') response.delete_cookie('username') # 删除cookie del request.session["username"] # 删除session return response