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。

 

posted @ 2019-01-09 22:09  南辕北辙的天空  阅读(184)  评论(0编辑  收藏  举报