• Django的session学习


    session的由来

    cookie最大的问题就是键值对保存在客户端的浏览器上,我们看下session是如何保存的呢?

    比如一个请求过来,数据是这样的{“username”:"zyb","password":"admin"},这个是时候在服务端这边,保存的格式是这样的

    随机字符串1:{“username”:"zyb","password":"admin"}

    而返回给客户端的数据是{“随机字符串2”:“随机字符串1”}

    就比如下面的图,session就是k1或者k2对应的字典,也就是说,session是保存在服务端的,k1和k2就是为了保存不同用户的数据

    上面的图有点简单,可以看下下面的图

     流程就是这样的,客户端过来,带着一个随机字符串和k1的值,服务端根据k1的值去获取本地保存的字典,进行验证即可

    session定义:session是保存在服务端的键值对,session必须依赖于cookie。

    1、在服务端生成随机字符串

    2、步骤一生成的随机字符串做为k,用户的数据做为v,将这个大字典保存在服务端

    3、把步骤一生成的随机字符串当成cookie返回给客户端 

    4、浏览器下次来,带着随机字符串来就可以了

    5、浏览器发起请求,服务端从cookie中找到随机字符串

    6、然后根据随机字符串拿到从服务端获取具体的用户数据

     设置session

            if username == "root" and userpwd == "root":
    
                rep = render(request,"session_2.html",locals())
                request.session["username"] = username
                request.session["userpwd"] = userpwd
                # 将session保存在数据库中
    

      

    取出session

    def outer(func):
        def inner(request):
            # username = request.COOKIES.get("username")
            # userpwd = request.COOKIES.get("userpwd")
            username = request.session["username"]
            username = request.session.get("username")
            userpwd = request.session["userpwd"]
            userpwd = request.session.get("userpwd")
            # 1、获取cookie中的随机字符串
            # 2、然后根据随机字符串去数据库中取拿到数据
            # 3、然后根据拿到的数据,这个数据就是一个字典,然后通过拿字典的值,用get方法或者直接用k去获取即可
    
    
            if username and userpwd:
                rep = func(request)
                return rep
            else:
                return redirect("/app1/session_one/")
        return inner
    

      

    清空session

    def logout(request):
        request.session.flush()
        return redirect("/app1/session_one/")
    

      

    上面我是通过chrom去访问的,下面我通过ie浏览器访问,最后可以看到数据库中会多了一条数据

     执行注销操作,发现数据库中会少一条数据,flush操作会删除cookie和session,del方法只会删除session

    def logout(request):
        request.session.flush()
        return redirect("/app1/session_one/")
    

      

    session的其他操作

     

     默认情况下session过期,数据库中的session不会被清除,需要执行命令去清理过期的session,request.session.clear_expired()命令

    如何存储session,这些设置是在django的settings中设置的

    其他session的公用的设置

    我们一般会在settings中设置sessio_save_every_request = True

  • 相关阅读:
    [SQL SERVER] The CHECK_POLICY and CHECK_EXPIRATION options cannot be turned OFF when MUST_CHANGE is ON. (Microsoft SQL Server, Error: 15128)
    CENTOS7 SYSTEMD SERVICE 将自己的程序放入自动启动的系统服务
    CentOS7 关闭selinux
    面试总结TODO
    很好用的 UI 调试技巧
    点满 webpack 技能点,让你的打包速度提效 90%
    前端缓存最佳实践
    Fiddler抓包工具总结
    按钮粒子效果
    如何优雅的在 vue 中添加权限控制
  • 原文地址:https://www.cnblogs.com/bainianminguo/p/9147418.html
Copyright © 2020-2023  润新知