zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    汉语-词语:什么
    汉语-词语:甚么
    汉语-汉字:心
    汉语-词汇:头脑
    汉语-词语:冰冷
    汉语-词汇:冷静
    两个int类型的数据相加,有可能会出现超出int的表示范围。
    两个int类型的数据相加,有可能会出现超出int的表示范围。
    成员变量与局部变量的区别_
    函数额基本概述
  • 原文地址:https://www.cnblogs.com/zhang-yl/p/10247192.html
Copyright © 2011-2022 走看看