【问题标题】:What is the difference between a cookie and a session in django?django中的cookie和会话有什么区别?
【发布时间】:2011-07-04 01:27:35
【问题描述】:

我认为它们是相同的,但我的老板说这是不对的。有人能解释一下区别吗?

【问题讨论】:

    标签: django session cookies


    【解决方案1】:

    补充 'Yuji 'Tomita' Tomita 的回答'

    使用 cookie 您可以在客户端浏览器上设置任何信息 不只是 id(会话 id),

    与会话相比,Cookie 有限(大小限制为 kb)、不太安全不太灵活

    django 会话基于 cookie,django 使用 cookie 将 session id 保存在客户端

    会话不限于数据大小(因为它们保存在服务器的数据库中),更安全更灵活。 p>

    【讨论】:

      【解决方案2】:

      cookie 是位于客户端浏览器上的东西,只是对 Session 的引用,默认情况下,它存储在您的数据库中。

      cookie 存储随机 ID,本身不存储任何数据。会话使用 cookie 中的值来确定数据库中的哪个Session 属于当前浏览器。

      这与直接在 cookie 上写入信息有很大不同。

      例子:

      httpresponse.set_cookie('logged_in_status', 'True')
      # terrible idea: this cookie data is editable and lives on your client's computer
      
      
      request.session['logged_in_status'] = True
      # good idea: this data is not accessible from outside. It's in your database.
      

      【讨论】:

      • 检查this
      • SessionStorageCookieStorage 这里有什么区别:docs.djangoproject.com/en/dev/ref/contrib/messages/… -- 它们不是另一种保存数据的方式吗?但是你说cookie本身并不存储数据。
      • @buffer,默认使用 SessionStorage,cookie 包含数据库中数据存储的 ID。
      • 如果我理解正确,FallbackStorage 是使用CookieStorage 的默认存储类。这会将数据存储在 cookie 中,直到大小允许,然后再切换到 SessionStorage。后者可能是您描述的方式,即 cookie 将 ID 存储到会话。
      • @buffer,FallbackStorage 用于消息框架。默认会话引擎是django.contrib.session.s.backends.db,其工作方式如上所述。请忽略我对 SessionStorage 的评论 - 不确定那是什么。
      【解决方案3】:

      cookie 不是 Django 或 Python 特定技术。 cookie 是一种在客户端浏览器中存储少量状态的方式。它用于补充(或破解,取决于您的观点)HTTP,它是一种无状态协议。这里有各种各样的限制,其他域无法读取您的 cookie,您只能存储几 k 的数据(具体多少取决于浏览器!)等等。

      cookie 可用于存储会话密钥。会话是存储在服务器端的用户状态的集合。会话密钥被传回服务器,这使您可以查看该会话的状态。大多数 Web 框架(不仅仅是 Django)都会内置某种会话概念。这使您可以将服务器端状态添加到 HTTP 会话中。

      【讨论】:

        猜你喜欢
        • 2011-09-14
        • 2011-05-27
        • 2012-12-30
        • 1970-01-01
        • 2023-02-10
        • 2021-12-28
        • 1970-01-01
        • 2018-08-05
        • 2010-09-26
        相关资源
        最近更新 更多