cookie和session
Django中cookie工作流程
1、客户端浏览器发起请求
2、服务端接收到request,通过response对象的set_cookie("key","val")方法设置cookie并响应
3、再次请求,服务端可以通过 request.COOKIES.get("key")
简单登录验证示例
1 def index(request): 2 #获取浏览器请求中的的cookie 3 is_login = request.COOKIES.get('is_login') 4 if is_login: 5 return render(request, 'index.html') 6 return render(request,'login.html') 7 8 #登录界面 9 def login(request): 10 if request.method =="GET": 11 return render(request, 'login.html') 12 else: 13 user = request.POST.get('user') 14 pwd = request.POST.get('pwd') 15 obj_use = Userinfo.objects.filter(user=user,pwd=pwd).first() 16 if obj_use: 17 #得到httpresponse对象 18 obj = redirect('/index/') 19 #设置响应的cookie 20 obj.set_cookie("is_login",True) 21 obj.set_cookie('user',user) 22 return obj 23 return HttpResponse('error')
注意:
cookie 是在浏览器存储的,所以设置cookie是通过Response响应对象设置的,获取cookie信息直接从请求request中拿
Django中的session
主要方法实现流程
#request.session.get("is_login")的实现:
1 从请求中获取sessionid
2 去django_session表中获取对应记录对象
3 通过对象取出is_login这个键对应的值
#设置session值 request.session["key"] = "val"
if not sessionid :
1 生成一个随机字符串作为sessionid
2 在django-sesion表下创建一条记录(代表一个客户端浏览器)
3 响应set_cookie("sessionid",随机的字符串)
else:
1 获取sessionid
2 去diango_session数据库更新数据
#删除服务端session记录 request.session.flush()的实现
request.session.flush()的实现:
1 获取sessionid
2 过滤django_session对应的记录
3 删除记录
注意:
session的数据是存储在服务端django_session表中的,所以每个浏览器只能对应一个sessionid(如果浏览器发一个请求创建一个sessionid,那么服务端的表会非常大,这不切合实际)。这个sessionid存在浏览器中,只要这个sessionid存在每次发起请求都只是更新服务端的该id对应数据,只有不存在时才会给浏览器重新分配sessionid。