Cookie和会话之间的区别?


154

我正在接受Web开发方面的培训,并且正在学习有关JSPServlet的知识。我有一些知识HttpSession-我已经在一些示例项目中使用了它。

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

Cookie和会话是否相同?它们之间有什么区别?


另请参阅以下问题:< stackoverflow.com/questions/356562/… >具体来说,有关已签名Cookie的说明。
乔尔·科恩荷恩

我认为该问题的第二个答案更恰当,如果您选择该答案作为最佳答案,那么很多人都会读它。
Suraj Jain

Answers:


180

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

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


10
将其传递到URL(这会带来安全风险)。 ”实际上,两种方法都存在安全风险(不同的风险)。如果操作正确,并且用户理解该URL是秘密的并且永远无法在公共论坛中发布,则可以确保URL中的Secret-ID安全。
curiousguy 2012年

1
“标识符可以在URL中传递或保存到会话cookie中。” 。哪里?客户端还是服务器端?谢谢你澄清更多。
Adib Aroui 2014年

4
@whitelettersandblankspaces会话cookie存储在客户端上(其值包含唯一的会话标识符,该标识符随每个请求发送,以将浏览器会话映射到服务器上的用户会话)。
WynandB 2014年

306

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

现在,当银行出纳员知道他/她的记忆问题时,他/她可以在一张纸上写下您的信息,并为您分配一个短ID号。然后,您无需说出每次交易的帐号和驾驶执照,只需说“我是客户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会话来启用。


29
这是一个伟大的真实世界类比的绝妙解释。这个答案应该更多。对于那些最可能提出这样一个问题的新手来说非常容易。
user798719 2013年

2
如果我是用户,并且其他人知道我的会话ID,该怎么办?
Maria Ines Parnisari 2015年

3
@ I19可能,他们可以冒充您。这是在在线赌博场景中发生的-嗅探酒店wifi,窃取会话ID并访问帐户。确保会话完全是另一回事。
克里斯·库德莫

2
那么谁先创建了cookie?服务器还是客户端?还是取决于应用程序?(我想说一下服务器,因为它否则会构成安全威胁,但我认为值得一提?)
nha 2015年

4
@nha服务器创建会话,并将其与cookie一起传递给响应。会话的创建取决于您希望何时创建的应用程序逻辑。客户端也可以创建cookie,但是在标识会话的情况下它可能用处不大,因为服务器可能不知道该值代表会话中的内容。
阿泽姆(Azeem)2015年

4

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



1

Cookie基本上是一个跨Web浏览器访问的全局数组。许多次用于发送/接收值。它充当在表单之间访问值的存储机制。可以通过浏览器禁用Cookies,与会话相比,cookie对其使用增加了限制。

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


0

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

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


0

在Asp.net中的会话:

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

2.如果当前会话仍然存在,则保留数据。如果我们需要一些数据可以从多个控制器的子程序和视图中访问,则会话是存储和检索数据的方法。

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

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


0

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


0

Cookies以文本文件格式存储在浏览器中。它存储的数据数量有限。它仅允许4kb [4096bytes]。$ _ COOKIE变量不能容纳多个同名的Cookie

我们可以在easily.So访问的cookie值,它是不太安全 .The 的setcookie()函数必须出现之前,

<html> 

标签。

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

链接: Cookie和会话之间的差异


好吧,实际上您可以在Cookie中保存多个数据。此外,会话实际上不能保存无限量的数据。您所拥有的RAM数量非常有限。
Koray Tugay
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.