• 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 钥匙:
         1 创建随机字符串
         2 在django-sesion表中创建记录
           session-key    session-data   
            随机字符串    {"k1":"v1","k2":"v2"} 
         3 res.set_cookie("sessionid",随机字符串)
     else:
         
         2 在django-sesion表中创建记录
           session-key    session-data   
            随机字符串    {"k1":"v1"} 
         3  更新
    设置session流程

      3.2 获取session值 

    session_name = request.session["session_name"]

        3.2.1获取session 执行流程

    1 取钥匙   (request.COOKIES.get("sessionid"))
    
    2 在django-sesion表中查询记录:session-key=钥匙
    
    3 通过对象.k1将值返回
    获取session流程

      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 取钥匙   (request.COOKIES.get("sessionid"))
    
     2 在django-sesion表中查询记录:session-key=钥匙
    
     3 记录对象被删除
    flush删除流程

  • 相关阅读:
    使用Result代替ResultSet作为方法返回值
    java项目使用的DBhelper类
    几种更新(Update语句)查询的方法【转】
    SQL sum case when then else【转】
    解决lucene 重复索引的问题
    在jsp中运用ajax实现同一界面不跳转处理事件
    IIS7如何实现访问HTTP跳转到HTTPS访问 转的
    完整备份数据库+差异备份,恢复到另外一台服务器
    windows mobile ,wince 系统,用代码启动cab文件安装
    compact framework windows mobile wm c#代码 创建快捷方式
  • 原文地址:https://www.cnblogs.com/angle6-liu/p/10246873.html
Copyright © 2020-2023  润新知