zoukankan      html  css  js  c++  java
  • 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数据库、所以这里可能成功性能的瓶颈。

    ----

  • 相关阅读:
    AX ERROR: Could not find my mock parent, most likely I am stale 不及格的程序员
    利用Segue在视图控制器间传值的问题 不及格的程序员
    Creating a Singleton Instance 不及格的程序员
    iPad 通知 UIKeyboardWillShowNotification 不会在keyBoard处在Undock状态下接到通知 不及格的程序员
    Why RootViewController's view is rotated Automatically by System when the app first loaded? 不及格的程序员
    如何弹出UIDatePicker最好 不及格的程序员
    jQuery开始做恶了 不及格的程序员
    what is the SEL,id and IMP,Class ,Method? 不及格的程序员
    Objectivec 字符串比较的陷井 不及格的程序员
    Unable to create any keyboard shortcuts after the iOS 6.1.3 update on iPad. 不及格的程序员
  • 原文地址:https://www.cnblogs.com/JiangLe/p/8532943.html
Copyright © 2011-2022 走看看