Cookies 和session

一 会话跟踪

  在一个会话的多个请求中共享数据,这就是会话跟踪技术
  • 请求登录(请求参数是用户名和密码);
  • 请求转账(请求参数与转账相关的数据); 
  • 请求信誉卡还款(请求参数与还款相关的数据)。 

  

  登录信息在这个会话中是数据共享的,如果登录的是张三,那么在转账和还款时一定是相对张三的转账和还款!这就说明
我们必须在一个会话过程中有共享数据的能力。

二 cookies篇

  1  cookie简单定义 

1 cookie是在HTTP中它表示服务器送给客户端浏览器的小甜点。
2 key-value结构;
3 由服务器创建;
4 浏览器保存cookie

  2 cookie执行流程

1 浏览器首次post 请求浏览器的时候回携带一个空的cookie :{}

2 如果操作验证通过(登录成功)后,服务器创建一个cookie :{key:value},作为响应头的一部分传给浏览器.

3 浏览器下次访问网页的时候带着 ,这个创建好的cookie:{key:value}请求,服务器查看cookie信息,如果cookie
 存在,则放行,否则拦截.

  3 cookie规范

注意 :
    浏览器之间是不能进行共享cookie的;
    也就是说在你使用IE访问服务器时,服务器会把Cookie发给IE,然后由IE保存起来,当你在使用FireFox访问
服务器时,不可能把IE保存的Cookie发送给服务器。

  4 cookie 与Http头 -----------cookie 是通过HTTP请求和响应头在客户端和服务端进行传递的;

    4.1 cookie:请求头,客户端发给服务器; 首次post请求cookie为空

 格式:cookie:a=A;b=B;c=C.多个cookie用';'隔开;

    4.2  set_cookie:响应头 ,服务器发送给客户端

    格式:一个cookie对象一个set-cookie:
         如:set-cookie:a=A  set-cookie:b=B set-cookie:c=C

  5 cookie覆盖

如果服务器发送重复的cookie,那么会覆盖原有的cookie;
如 :
    第一次:Set-Cookie: a=A;
    第二次:Set-Cookie: a=AA
则最后客户端留下的cookie是 cookie:a=AA。 

  6 django中的cookie语法

    6.1服务端在验证通过后,设置cookie

rep = HttpResponse(...) 或 rep = render(request, ...) 或 rep = redirect()

#rep是响应对象,只有相应对象才有.set_cookie方法

rep.set_cookie(key,value) #一次只能绑定一个cookie键值对

rep.set_signed_cookie(key,value,salt='加密盐')  #加密方式绑定cookie键值对

  6.2 再次登录,获取cookie信息,进行验证

value=request.COOKIES('key') #获取cookie中键为key的值

  6.3 删除cookie

response.delete_cookie("key") #删除cookie中key的那个键值对

   7 实例代码

def login(request):
    if request.method=='GET':
        return render(request,'login.html')
    else:
        user=request.POST.get('user')
        pwd=request.POST.get('pwd')
        user_obj=models.UserInfo.objects.filter(user=user,pwd=pwd).filter()
        if user_obj:
            res_obj=redirect('/index/')
            res_obj.set_cookie("is_login",True,max_age=20)
            res_obj.set_cookie("user",user)
            return res_obj
        return HttpResponse('账户或者密码错误')
login cookies

三session篇

1 session 技术

1 给用户的浏览器创建一个独享的session对象;

2 每个浏览器都开辟独有的session资源;

3 用户再去访问该服务器中的其它web资源时,其它web资源再从用户各自的session中 取出数据为用户服务.

2 session 流程

3 django 中的session语法,结合session流程讲解

  3.1 设置session

request.session['is_login']=True

    3.1.1设置session 执行流程

    if not 获取钥匙(sessionid):
        1 给浏览器创建随机字符串sessionid;
        2 在django-sesion表下创建一条记录(代表一个客户端浏览器);
        3 响应set_cookie("sessionid",随机的字符串),发送给客户端;
    else:
        1 在django-sesion表下设置一条记录(代表一个客户端浏览器)
        2 更新记录
设置session流程

  3.2 获取session值 

session_name = request.session["session_name"]

    3.2.1设置session 执行流程

1 去钥匙
    2 去django-session表中获取对应记录对象
    3 通过对象取出is_login这个键对应的值
获取settion值的流程

  3.3 删除session的值

del request.session["session_name"]

    3.3.1 获取session执行流程

request.session.get("is_login")的实现:

1 取钥匙;

2 去django-session表中获取对应记录对象

3 通过对象取出is_login这个键对应的值
删除session值的流程

  3.4 删除session 

request.session.flush()

    3.4.1删除session执行流程

1 取sessionid钥匙

2 取django-session表中获取对应的记录;

3 删除对应的记录
flush 流程

猜你喜欢

转载自www.cnblogs.com/angle6-liu/p/10246873.html