我认为它们是同一件事,但我的老板说这不对。有人可以解释一下它们之间的区别吗?
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.
Cookie 并不是 Django 或 Python 特有的技术,它是一种在客户端浏览器中存储小量状态信息的方法。它用于补充(或者根据你的观点来看,绕过)HTTP,因为 HTTP 是无状态协议。这里有各种限制,比如其它域名不能读取你的 cookie,你只能存储少量的数据(具体取决于浏览器!),等等。
Cookie 可以用于存储 session key。session 是一组存储在服务器端的用户状态。session key 会传回到服务器端,让你可以查找该 session 的状态。大多数 Web 框架(不仅仅是 Django)都内置某种 session 概念,这样可以给 HTTP 对话添加服务器端状态。
为了补充Yuji 'Tomita' Tomita的回答
使用cookies,您可以在客户端浏览器上设置任何信息,而不仅仅是id(会话id)。
与会话相比,cookies受限制(大小限制为kb),安全性较低且灵活性较差。
Django会话基于cookies,Django使用cookie在客户端保存会话ID
会话不受数据大小限制(因为它们保存在服务器的数据库中),更安全且更灵活。
SessionStorage
和CookieStorage
有什么区别?请参考:https://docs.djangoproject.com/en/dev/ref/contrib/messages/#configuring-the-message-engine -- 它们不是保存数据的替代方式吗?但是你说cookie本身并不存储数据。 - userdjango.contrib.session.s.backends.db
,它的工作方式如上所述。请忽略我对SessionStorage
的评论 - 不确定那是什么。 - Yuji 'Tomita' Tomitadjango.contrib.sessions.backends.db
- 基于数据库的会话。 如果您改用django.contrib.sessions.backends.signed_cookies
,Django将在cookie中存储数据,而不使用数据库会话表。本问题假定您未使用signed_cookies
,因为大多数人使用默认系统。 - Yuji 'Tomita' Tomita