cookie、session、token
Cookie和Session
http协议不保存用户状态(信息)
Cookie和Session都是为了能够保存用户信息
Cookie:
本质:保存在浏览器上的键值对
用途:标识当前用户信息
cookie是服务端设置的,浏览器可以选择禁用
Session:
本质:保存在服务器上的键值对
用途:记录当前用户信息
session其实也是基于cookie工作的
为了数据更加安全,给浏览器存一个随机字符串,将用户信息存在服务端,
sessionid:‘随机字符串’
用户在访问的时候,拿着这个随机字符串来后端进行匹配
token
通过加密算法产生token给客户端(token只在客户端存)
通过解密算法验证token(安全认证)
flask中会把session[‘name’]=value 的值转换成token丢进cookie中,再次请求的时候会携带上cookie进行访问,django中的jwt不会。
Cookie部分
获取cookie
request.COOKIES['key']
request.COOKIES.get('key') #推荐用这种方法,如果用 [ ] 取值的话,key不存在的时候会报错
request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)
设置Cookie
问题:django返回的信息都是什么对象?
– HttpResponse对象
return render()
return HttpResponse()
return redirect()
rep = HttpResponse(...)
rep = render(request, ...)
rep.set_cookie(key,value,...)
rep.set_signed_cookie(key,value,salt='加密盐', max_age=None, ...)
return rep
views.py
login为登陆页, index为跳转页面,在获取login中携带名为键为"name"的cookie后,再实现跳转,否则就返回login页面return render(requests,'login.html')
图中截图不全。
给cookie验证加一个装饰器例子:index只有登陆了才能访问,否则跳转login,先登陆
34.25 cookie操作
删除Cookie
def logout(request):
rep = redirect("/login/")
rep.delete_cookie("user") # 删除用户浏览器上之前设置的usercookie值
return rep
Session部分
设置seesion
request.session['name'] = 'jack'
注释:
1.内部自动生成一个随机字符串
2.服务端默认的session表内存入数据
表头 随机字符串 value time
asasfsdf {k:v,…} django默认session超时时间为14天
3.将随机字符串写到浏览器的cookie中
sessionid:随机字符串