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

Aka*_*h K 16 django cookies session

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

小智 10

一个会话是网站用来存储应用程序状态在多个页面加载的游客.

Cookie会话

  • 将他们的数据存储在客户端/用户端
  • 当您拥有一组Web服务器时,可以顺利运行
  • 浏览器通常将cookie限制为每个域大约4千字节的最大大小,因此会话数据大小有限
  • 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-你可能不应该使用cookies-to-store-session-data
http://www.tuxradar.com/practicalphp/10/1/0

  • 对于数据库会话,如果所有Web服务器共享一个数据库,为什么群集中的其他Web服务器不会存储存储的信息? (3认同)
  • 我不认为 cookie 会话很容易被黑客入侵。根据文档,MAC 用于确保您收到的数据的真实性。因此,您可以确保获取的是您设置的数据,而不是被篡改的数据。OTOH,*读取* cookie 会话数据非常容易。 (3认同)