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

时间:2013-08-14 18:45:42

标签: django session cookies

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

1 个答案:

答案 0 :(得分:10)

网站使用Session为多个网页加载的访问者存储application state

Cookie会话

  • 将他们的数据存储在客户端/用户端
  • 当您拥有一组Web服务器时,工作顺利
  • 浏览器通常会将Cookie限制为每个域最大大小约4 KB,因此会话数据量有限
  • Cookie可以设置为较长的​​生命周期,这意味着存储在会话cookie中的数据可以存储数月(如果不是数年)(用户可以清除cookie)
  • 必须使用HttpOnly和Secure标志设置,否则可以通过XSS轻松窃取

数据库会话

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

Cookie会话与数据库会话

| Feature                       | Cookie Sessions | Database Sessions |
|-------------------------------|-----------------|-------------------|
| Works without database        | Yes             | No                |
| Can store sensitive user data | No*             | Yes               |

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

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-you-probably-shouldnt-use-cookies-to-store-session-data
http://www.tuxradar.com/practicalphp/10/1/0