Django - 数据库支持的会话和基于 Cookie 的会话之间的区别?

Posted

技术标签:

【中文标题】Django - 数据库支持的会话和基于 Cookie 的会话之间的区别?【英文标题】:Django - Difference between Database backed sessions and Cookie Based Session? 【发布时间】:2013-08-16 21:11:09 【问题描述】:

正在浏览 Django 文档并找到这个“https://docs.djangoproject.com/en/1.4/topics/http/sessions/#using-database-backed-sessions”。数据库支持的会话和基于 cookie 的会话有什么区别?一个比另一个有什么优势?有什么缺点?

【问题讨论】:

想按照 django 来回答。默认会话后端是 django 中的数据库。django_session 是会话的表。Request.session 中的会话对象是一个字典,经过腌制和编码并存储在数据库列中,并且每个会话都通过会话 ID 持久化。最后,每个 sessionid 都存储在一个 cookie 中,在第一次请求网页时发送。如果将 store_session_on_each_request 设置为 True,则每个请求的 session id 都通过 cookie 发送。 【参考方案1】:

网站使用Session 存储application state 以供跨多个页面加载的访问者使用。

Cookie 会话

将他们的数据存储在客户端/用户端 当您拥有一组 Web 服务器时,可以顺利工作 浏览器通常将 cookie 限制为每个域的最大大小约为 4 KB,因此限制了会话数据大小 Cookie 可以设置为长寿命,这意味着存储在会话 cookie 中的数据可以存储数月甚至数年(但用户可以清除 cookie) 必须设置 HttpOnly 和 Secure 标志,否则很容易被 XSS 窃取

数据库会话

存储他们的数据服务器端 您的一个 Web 服务器处理第一个请求,集群中的其他 Web 服务器将没有存储的信息,除非集中存储用户会话数据 客户无权访问您存储的有关他们的信息,因此更适合敏感数据。 数据不必在每次请求时从客户端传输到服务器(客户端只需发送一个 ID 以便服务器可以加载数据) 可以存储更多数据,因为存储在服务器而不是 cookie 中

Cookie 会话与数据库会话

|特色 | Cookie 会话 |数据库会话 | |-------------------------------------------|----------------- |-------------------| |无需数据库即可工作 |是 |没有 | |可以存储敏感的用户数据|否* |是 |

* 可以在服务器上存储引用敏感用户数据的指针,而不是敏感数据本身。

Cookie 会话和数据库会话的工作方式相同,唯一的区别是数据的存储位置。 Django 默认为数据库会话,而Flask 默认为 Cookie 会话。

更多信息:https://en.wikipedia.org/wiki/Session_(computer_science)http://php.about.com/od/learnphp/qt/session_cookie.htmhttp://wonko.com/post/why-you-probably-shouldnt-use-cookies-to-store-session-datahttp://www.tuxradar.com/practicalphp/10/1/0

【讨论】:

在数据库会话中,如果所有 Web 服务器都共享一个数据库,为什么集群中的其他 Web 服务器没有存储的信息? @KrisF 如果您使用单个数据库,他们会共享 cookie。当用户关闭浏览器时,cookie 也不会被清除(默认情况下)。 我认为 cookie 会话不容易被黑客入侵。根据文档,MAC 用于确保您收到的数据的真实性。所以你可以确定你得到的是你设置的数据,而不是被篡改的数据。 OTOH,读取 cookie 会话数据非常容易。

以上是关于Django - 数据库支持的会话和基于 Cookie 的会话之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章

Django 1.10 中文文档------3.3.8 会话sessions

123

Django + JSON Web 令牌 + 禁用基于会话的授权

Django 中 cookie的使用

Django 中 cookie的使用

Django Rest 框架中的基于会话的与令牌身份验证