原因:http协议是短连接,不能保留用户状态
作用:
response.set_cookie("uname", username)#让客户端存储数据
response.set_cookie("uname", username, max_age=30)#有效期为30秒
response.set_cookie("uname", username, expires=timedelta(minutes=1))#设置多长时间过期,可以是小时,分钟,周
uname = request.COOKIES.get('uname',None)#返回字典数据
response.delete_cookie("uname")#删除数据
Cookie的实现
#在客户登录成功时的路由中
#勒令客户端通过Cookie来保存自己的状态
res =HttpResponse()
#保存登录成功后uname的信息,并保存60秒
res.set_cookie('uname',uname,max_age=60*1)
使用保存在cookie内的数据
uname = request.COOKIE.get('uname',None)
name = uname if uname else '游客'
return HttpResponse(name)
取消保存状态
res =HttpResponse()
res.delete_cookie("uname")#删除数据
res.content = ('登出成功')
return res
@session
保存在服务端,也许在内存,或许在数据表里面 ,会在表里生成一个session_id 和session_data字段,因此通过Request对象去关联用户的session,session_id会返回保存在Cookie里,session _data可以使用base64解码转成相应的键值对,相对于Cookie更安全,可控。
常用api
uname = request.session.get('uname')
request.session['uname'] = username
request.session.flush()#同时清除cookie 和 session
del request.session['uname']#清除指定的信息
实现保存用户状态
方法和cookie差不多都是客户登录成功或者后,保存开session里
使用用户保存的session信息也是一样,先去session里找,没有就显示游客
@token
手动实现的seession,保存在服务端,但是依然通过Cookie在客户端种植token_id,token_key,由自己定义
将用户状态保存在utoken中,让客户端持有一个utoken
st =str(uuid.uuid4())
resq.set_cookie('utoken',st)
user.utoken = st
user.save()
当用户登录的时候,客户端会匹配数据表的utoken,如果匹配上,再由utoken把用户信息提给客户端
utoken = requset.COOKIES.get('utoken',None)
if utoken:
user= User.objects.filter(utoken=utoken)
if user:
uname = user.uname
name = uname if uname !=None else '游客'
@消息摘要
作用是保障数据的安全性,就是原文生成一个摘要,如果原文有一点修改,修改后的摘要和原来的摘要不匹配,就表明数据已经发生修改。
md5的特性
数据不可逆,如有逆出来就是撞库了,几率和买彩票一样
用户登录注册密码过来后对密码生成摘要保存在表中
md5= hashlib.md5()
md5.update(upwd.encode('utf-8'))
upwd = md5.hexdigest()
用户登录后对上传的密码转成生成摘要匹配数据库中的摘要
md5= hashlib.md5()
md5.update(upwd.encode('utf-8'))
upwd = md5.hexdigest()