Django中cookie和session的区别是什么?

31

我认为它们是同一件事,但我的老板说这不对。有人可以解释一下它们之间的区别吗?

3个回答

33
一个cookie是指存在客户端浏览器上的东西,它仅仅是一个对"Session"的引用,而这个"Session"默认存储在你的数据库中。cookie保存了一个随机ID,不会本身存储任何数据。"Session"使用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.

请查看这个链接 - Jibin
这里有一个问题:SessionStorageCookieStorage有什么区别?请参考:https://docs.djangoproject.com/en/dev/ref/contrib/messages/#configuring-the-message-engine -- 它们不是保存数据的替代方式吗?但是你说cookie本身并不存储数据。 - user
使用SessionStorage的@buffer,默认情况下,cookie包含一个指向数据库中数据存储的ID。 - Yuji 'Tomita' Tomita
@buffer,FallbackStorage 是用于消息框架的。默认的会话引擎是 django.contrib.session.s.backends.db,它的工作方式如上所述。请忽略我对 SessionStorage 的评论 - 不确定那是什么。 - Yuji 'Tomita' Tomita
@buffer 是的,只要启用那个cookie会话存储方案。默认情况下,django使用 django.contrib.sessions.backends.db - 基于数据库的会话。 如果您改用 django.contrib.sessions.backends.signed_cookies,Django将在cookie中存储数据,而不使用数据库会话表。本问题假定您未使用 signed_cookies,因为大多数人使用默认系统。 - Yuji 'Tomita' Tomita
显示剩余2条评论

12

Cookie 并不是 Django 或 Python 特有的技术,它是一种在客户端浏览器中存储小量状态信息的方法。它用于补充(或者根据你的观点来看,绕过)HTTP,因为 HTTP 是无状态协议。这里有各种限制,比如其它域名不能读取你的 cookie,你只能存储少量的数据(具体取决于浏览器!),等等。

Cookie 可以用于存储 session key。session 是一组存储在服务器端的用户状态。session key 会传回到服务器端,让你可以查找该 session 的状态。大多数 Web 框架(不仅仅是 Django)都内置某种 session 概念,这样可以给 HTTP 对话添加服务器端状态。


0

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

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

与会话相比,cookies受限制(大小限制为kb),安全性较低灵活性较差

Django会话基于cookies,Django使用cookie在客户端保存会话ID

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接