• django session入门详解


    概括性的讲:

      1、django默认是打开对session的支持的

      2、默认情况下session相关的数据会保存在数据库中、浏览器端只保存了session id 

    session 的科普:

      1、动态网站中的页面都是由应用服务器动态生成的、内容的差别是由数据决定的;比较说你在京东的购物车信息和我在京东

      的购物车信息是不同的。也就是说网站的内容是根据你的数据“画”出来的。

      2、怎么关联到用户所对应的数据呢?通常的解决方式是“登录”登录之后服务器就知道你是谁了,它就可以在数据库中查到你

      的数据,然后就可以根据你的数据“画”出你的web页面。 但是这样还是有问题的,问题就在于它区分不了没有登录的用户,也

      就是说这样情况下所有的匿名用户看到的内容是一样的,为了能区分匿名用户,引入了session + cookie 这一机制;事实上前面

      说的“登录”后服务器能记住用户,也是基于这个的。

      3、服务器为每一个用户分配一个session id ,可以把这个session id 类比成超市门口的储物柜的格子号、你的东西就放在你的格子

      号所对应的格子里;这个session id 一般的用户不会关注的,除非你的程序员、这个session id 放在哪里是由浏览器自己决定的、像

      IE会把session id 记录到一个txt文件中去;有了session id后浏览器每次请求服务器时都会发送这个session id 、服务器有了session

      id 就能在服务器的“储物柜”中找到你的那个格子了。

    例子:

      1、第一次访问页面、由于没有session id 通常服务器会给一个默认的返回,并分配给用户一个session id 

      2、第二次访问页面、由于已经有了session id 那么就可以根据session id 所对应的数据动态的“画”页面了

      3、关键代码

    from django.http import HttpResponse
    
    def index(request):
        """
        """
    
        if request.session.get('name',None) == None:
            request.session['name']='二狗'
            return HttpResponse("你还没有名字 给你起一个‘二狗’吧! ")
        return HttpResponse("你好{0}! ".format(request.session['name']))

      4、由于第一次访问还没有分配到session id 、这个时候会给它分配一个新的name “二狗”

      5、第二次访问时就可以根据它的session 保存的数据进行动态的页面“画”图了

     

     同样的一条url由于第二次访问已经有了数据、所以页面的内容就变了

    服务器把session中的数据保存在了哪里:

      django的默认配置下session中的数据是保存在数据库中的、不过这个行为可以通过设置进行调整;我们这里只关注默认行为

      数据库中查看session的数据:

     select * from django_session limit 1 G
    *************************** 1. row ***************************
     session_key: gd60lzva562k4cmzers6gu06gtli4kof
    session_data: ZjFiZDgwYmI2OTFhMzdlNGEzODM2YTVjNTcwNjM5ZjI3NzcwNzlmNzp7Im5hbWUiOiJcdTRlOGNcdTcyZDcifQ==
     expire_date: 2018-03-22 09:22:00.320357

      不是说好的“二狗”吗? 怎么看不出汉字?别怕这个是经过base64编码过的结果、我们要看到内容要把base64这一层去掉

    看到了吧 已经找到了我们设置的name,“二狗”这个值还是不对呀! 别慌这个是unicode字面值、还要再解一次码、就能看到中文了

      

      

     总结:

      1、默认情况下django中session的内容基本上就说完了

      2、默认情况下是有一定问题的、session的更新都要访问MySQL数据库、所以这里可能成功性能的瓶颈。

    ----

  • 相关阅读:
    Activity 与ListActivity的区别
    自定义标题栏
    解决小程序无法触发SESSION问题
    js数组与字符串经常用的几种简单的方法
    python程序与进制的执行过程
    常问的 web前端 问题
    如何判断页面滑到了屏幕最底部
    http请求状态保持的四种方法
    vue知识点归纳与总结(笔记)
    Nginx常用命令及使用场景
  • 原文地址:https://www.cnblogs.com/JiangLe/p/8532943.html
Copyright © 2020-2023  润新知