会话cookie的生命周期是多少?

时间:2010-09-15 01:02:54

标签: asp.net

我说直到您退出,会话超时或关闭浏览器。但我是对的吗?

我今天接受采访,面试官想知道我是否登录页面并关闭浏览器(没有注销),会话会发生什么。

我说会议将成为孤儿。他说没有 - 因为他们的用户可以通过打开浏览器(仅使用cookie)连接回会话。我告诉他这是一个持久的cookie - 而不是会话cookie。 我说如果这是原因,那么就没有什么能阻止用户将[persistent] cookie导出到另一台计算机并在该计算机上启动会话。

起初他说你不能出口饼干,但当我解释如何时,他说他会看,但由于包括2位建筑师在内的很多人想出了这个设计,所以不太可能出错。< / p>

4 个答案:

答案 0 :(得分:5)

你是对的。当浏览器关闭时会删除会话cookie,并在其到期时间结束时删除持久性cookie。如果会话在浏览器关闭后保持活动,则他们的网站必须使用持久性cookie。所有cookie都可以导出到另一台计算机。这是一个众所周知的安全漏洞,可以通过使用SSL来缓解。

答案 1 :(得分:2)

会话cookie是没有过期时间的cookie。

会话cookie的处理因浏览器和浏览器版本而异,但通常在该浏览器的最后一个实例关闭时(生命周期=浏览器的运行时间)删除没有过期日期的cookie。

重要的是,与cookie值对应的服务器端会话具有在服务器上定义的完全独立的生命周期。 HTTP是一种无连接协议,因此当您的浏览器不在事务中时,服务器端不知道您是否仍在那里。 Tomcat发布名为JSESSIONID的唯一固定长度cookie,它们链接到服务器上存储的会话数据。在这种情况下,会话到期时间存储在服务器上。 ASP base64对所有会话信息进行编码,对其进行加密,并将其写入浏览器中的巨型cookie,这样就不必将该会话数据存储在服务器上。会话到期时间保存在cookie中存储的加密数据中。无论哪种方式,都会记录会话何时到期,因此会话生存期不能超过服务器端超时。

您可以在另一个浏览器中设置相同的cookie,并发送第一个浏览器发送的相同数据(主要是cookie),只要尚未达到服务器超时,服务器就会允许您访问服务器以同样的方式进行会话。当人们对你的cookie做这件事时,它被称为会话劫持。

这是添加“会话”cookie的JavaScript代码,它只是一个没有设置“Expires”值的cookie。

document.cookie="COOKIENAME=cookievalue";

这是一个JavaScript,它添加了一个具有特定过期时间的cookie,这意味着浏览器被指示在此之后停止发送传出请求:

document.cookie="COOKIENAME=cookievalue; expires=Fri, 31 Dec 9999 00:00:01 GMT";

发送到服务器的cookie数据不包括过期时间等元数据;服务器只能看到键=值对。 到期数据仅供浏览器读取。 使用上述任一方法设置cookie将导致浏览器以这种方式将cookie发送到服务器:

Cookie: COOKIENAME=cookievalue

服务器最初设置有或没有过期日期的cookie,但它不知道是否已经更改,并且它并不真正关心。设置为下个月到期的cookie与在浏览器运行到下个月的计算机上的会话cookie之间没有功能差异。

答案 2 :(得分:1)

Web应用程序中没有明确的“会话”定义。网站可能决定使用持久性cookie或会话cookie来查找后续请求的会话上下文(或者除了cookie之外的其他内容)。如果会话查找是通过会话cookie完成的,那么您所说的孤立会话(在服务器上,客户端无法访问)是正确的。

但是,“关闭浏览器时”不明确。例如,如果您打开了两个Internet Explorer实例,则两个窗口都可能使会话cookie保持活动状态。因此,关闭显示网站页面的“浏览器”不一定会清除cookie。

答案 3 :(得分:-3)

不确定它是否与ASP相同,但我知道在PHP中它是20 minutes