cookie 和会话之间的区别?

Posted

技术标签:

【中文标题】cookie 和会话之间的区别?【英文标题】:Differences between cookies and sessions? 【发布时间】:2010-09-26 10:38:41 【问题描述】:

我正在接受 Web 开发培训,并且正在学习 JSPServlet。我对HttpSession 有所了解 - 我在一些示例项目中使用过它。

在浏览器中,我看到了“删除 cookie”的选项。如果我删除 cookie,它也会删除 HttpSession

cookies 和 session 是一样的吗?它们之间有什么区别?

【问题讨论】:

也看这个问题:***.com/questions/356562/…>具体来说,关于签名cookies的备注。 我认为这个问题的第二个答案更贴切,如果你选择它作为最佳答案,很多人会阅读它。 【参考方案1】:

Cookies以文本文件格式存储在浏览器中。它存储的数据量是有限的。它只允许4kb[4096bytes]。$_COOKIE 变量不会持有多个同名cookies

我们可以轻松访问 cookie 值。所以它不太安全setcookie()函数必须出现在

之前
<html> 

标签。

会话存储在服务器端。它存储无限量的数据。它在会话中保存多个变量。我们无法轻松访问 cookie 值。因此它更安全

【讨论】:

嗯,实际上你可以在 cookie 中保存多个数据。此外,会话不能真正保存无限量的数据。您的 RAM 数量非常有限。【参考方案2】:

在这个线程上已经有很多贡献了,只是总结一个序列图以另一种方式说明它。

这也是一个关于这个话题的好链接,https://web.stanford.edu/~ouster/cgi-bin/cs142-fall10/lecture.php?topic=cookie

【讨论】:

【参考方案3】:

cookie 只是一个在客户端和服务器之间来回发送的短文本字符串。您可以将name=bob; password=asdfas 存储在一个cookie 中并来回发送以识别服务器端的客户端。您可以将其视为与没有短期记忆的银行柜员进行交换,并且需要您为每笔交易确定自己的身份。当然,使用 cookie 来存储此类信息是非常不安全的。 Cookie 的大小也有限制。

现在,当银行柜员知道他/她的记忆问题时,他/她可以在一张纸上写下您的信息,并为您分配一个简短的身份证号码。然后,不用为每笔交易提供您的帐号和驾照,您只需说“我是客户 12”

将其转换为 Web 服务器:服务器将相关信息存储在会话对象中,并创建一个会话 ID,它将在 cookie 中发送回客户端。 当客户端发回 cookie 时,服务器可以简单地使用 ID 查找会话对象。因此,如果您删除 cookie,会话将丢失。

另一种选择是让服务器使用 URL 重写来交换会话 ID。

假设您有一个链接 - www.myserver.com/myApp.jsp 您可以浏览该页面并将每个 URL 重写为 www.myserver.com/myApp.jsp?sessionID=asdf 甚至 www.myserver.com/asdf/myApp.jsp 并以这种方式交换标识符。此技术由 Web 应用程序容器处理,通常通过将配置设置为使用无 cookie 会话来启用。

【讨论】:

这是一个以真实世界类比为基础的精彩解释。这个答案应该得到更多的支持。对最有可能提出此类问题的新手来说非常容易。 如果我是用户而其他人知道我的会话 ID 会怎样? @I19 他们可能会冒充你。这发生在在线赌博场景中——嗅探酒店 wifi、窃取会话 ID 并访问帐户。确保会话安全完全是另一回事。 那么谁先创建 cookie 呢?服务器还是客户端?或者这个应用程序依赖? (我会说服务器,否则它会构成安全威胁,但我认为值得一提?) @nha 服务器创建会话并将其与 cookie 一起传递到响应中。当您希望创建会话时,将根据应用程序逻辑创建会话。客户端也可以创建一个cookie,但在识别会话的场景中可能没有多大用处,因为服务器可能不知道会话中的值代表什么。【参考方案4】:

Cookie 是一种实现客户端和服务器之间会话的方式,这种方式将会话信息存储在 cookie 中。但这不是保存会话信息的唯一方法,另一种方法是将会话信息存储在 Url 中。

【讨论】:

【参考方案5】:

Cookie 基本上是一个跨网络浏览器访问的全局数组。多次用于发送/接收值。它作为一种存储机制来访问表单之间的值。浏览器可以禁用 Cookie,与 session 相比,这增加了它们的使用限制。

会话可以定义为登录和注销之间的东西。用户登录和注销之间的时间是一个会话。会话仅存储会话时间的值,即在注销之前。 会话用于跟踪用户登录后的活动。

【讨论】:

【参考方案6】:

Asp.net 中的会话:

1.维护整个应用程序的数据。

2.如果当前会话处于活动状态,则保留数据。如果我们需要从多个控制器和视图中访问某些数据,则会话是存储和检索数据的方式。

3.Sessions 是包含用户信息的服务器端文件。 [会话是将它们映射到特定用户的唯一标识符]

将其转换为 Web 服务器:服务器将相关信息存储在会话对象中,并创建一个会话 ID,并将其在 cookie 中发送回客户端。当客户端发回 cookie 时,服务器可以简单地使用 ID 查找会话对象。因此,如果您删除 cookie,会话将丢失。

【讨论】:

【参考方案7】:

Cookie 和会话都存储有关用户的信息(以使 HTTP 请求有状态),但不同之处在于 cookie 将信息存储在客户端(浏览器)上,而会话将信息存储在服务器端。 cookie 是有限的,因为它存储有关有限用户的信息,并且只为每个用户存储有限的内容。会话不受这种方式的限制。

【讨论】:

【参考方案8】:

谷歌 JSESSIONID。这将解释 Servlet API 最初如何使用 URL 重写,然后,如果启用了 cookie,则使用 cookie 来管理会话。

HTTP 是无状态的,因此客户端浏览器必须在每次请求时将其会话 ID 发送到服务器。服务器通过任何方式使用此 id 来检索该会话的任何数据,使其在请求的生命周期内可用。

【讨论】:

【参考方案9】:

会话是包含用户信息的服务器端文件,而 Cookie 是包含用户信息的客户端文件。会话具有将它们映射到特定用户的唯一标识符。此标识符可以在 URL 中传递或保存到会话 cookie 中。

大多数现代网站都使用第二种方法,将标识符保存在 Cookie 中,而不是在 URL 中传递(这会带来安全风险)。您可能在不知情的情况下使用了这种方法,并且通过删除 cookie,您在删除 cookie 中包含的唯一会话标识符时有效地删除了它们的匹配会话。

【讨论】:

在 URL 中传递它(这会带来安全风险)。”实际上这两种方法都有安全风险(不同的)。 URL 中的秘密 ID 如果处理得当,并且用户知道该 URL 是秘密的并且永远不能在公共论坛上发布,则可以确保其安全。 "标识符可以在 URL 中传递或保存到会话 cookie 中。" .在哪里?客户端还是服务器端?谢谢你澄清更多。 @whitelettersandblankspaces 会话 cookie 存储在客户端(其值包含唯一的会话标识符,该标识符随每个请求发送,以将浏览器会话映射到服务器上的用户会话)。

以上是关于cookie 和会话之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章

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

Cookie 和 Redis 会话存储有啥区别?

会话亲和力和粘性会话之间的区别?

Cookiesession和localStorage以及sessionStorage之间的区别

AngularJS 中会话存储、本地存储和 Cookie 的区别

Express 会话和 PassportJS 之间的区别