【发布时间】:2011-07-04 01:27:35
【问题描述】:
我认为它们是相同的,但我的老板说这是不对的。有人能解释一下区别吗?
【问题讨论】:
我认为它们是相同的,但我的老板说这是不对的。有人能解释一下区别吗?
【问题讨论】:
补充 'Yuji 'Tomita' Tomita 的回答'
使用 cookie 您可以在客户端浏览器上设置任何信息 不只是 id(会话 id),
与会话相比,Cookie 有限(大小限制为 kb)、不太安全和不太灵活。
django 会话基于 cookie,django 使用 cookie 将 session id 保存在客户端
会话不限于数据大小(因为它们保存在服务器的数据库中),更安全和更灵活。 p>
【讨论】:
cookie 是位于客户端浏览器上的东西,只是对 Session 的引用,默认情况下,它存储在您的数据库中。
cookie 存储随机 ID,本身不存储任何数据。会话使用 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.
【讨论】:
SessionStorage 和 CookieStorage 这里有什么区别:docs.djangoproject.com/en/dev/ref/contrib/messages/… -- 它们不是另一种保存数据的方式吗?但是你说cookie本身并不存储数据。
FallbackStorage 是使用CookieStorage 的默认存储类。这会将数据存储在 cookie 中,直到大小允许,然后再切换到 SessionStorage。后者可能是您描述的方式,即 cookie 将 ID 存储到会话。
django.contrib.session.s.backends.db,其工作方式如上所述。请忽略我对 SessionStorage 的评论 - 不确定那是什么。
cookie 不是 Django 或 Python 特定技术。 cookie 是一种在客户端浏览器中存储少量状态的方式。它用于补充(或破解,取决于您的观点)HTTP,它是一种无状态协议。这里有各种各样的限制,其他域无法读取您的 cookie,您只能存储几 k 的数据(具体多少取决于浏览器!)等等。
cookie 可用于存储会话密钥。会话是存储在服务器端的用户状态的集合。会话密钥被传回服务器,这使您可以查看该会话的状态。大多数 Web 框架(不仅仅是 Django)都会内置某种会话概念。这使您可以将服务器端状态添加到 HTTP 会话中。
【讨论】: