16

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

4

1 回答 1

13

网站使用Session来存储跨多个页面加载的访问者的应用程序状态

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.htm
http://wonko.com/post/why-你可能应该使用 cookie 存储会话数据
http://www.tuxradar.com/practicalphp/10/1/0

于 2013-08-14T19:09:09.300 回答