【问题标题】:What is the lifetime for a session cookie?会话 cookie 的生命周期是多少?
【发布时间】:2019-03-20 17:13:40
【问题描述】:

我说在您注销、会话超时或关闭浏览器之前。但我说的对吗?

我今天进行了一次面试,面试官想知道如果我登录一个页面并关闭浏览器(不注销),会话会发生什么。

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

起初他说你不能导出 cookie,但当我解释如何时,他说他会看,但由于包括 2 位建筑师在内的很多人都提出了这个设计,所以他们不太可能都错了。

【问题讨论】:

  • 当会话标识符存储在 cookie 中时,它们会在浏览器会话之间保持不变。 cookie 将与初始请求一起发送并恢复会话,除非您提到的其他条件当然得到满足。

标签: asp.net


【解决方案1】:

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

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

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

您可以在另一个浏览器中设置相同的 cookie,并发送与第一个浏览器相同的数据(主要是 cookie),只要未达到服务器超时,服务器就会让您访问服务器-side session 以同样的方式。当人们对您的 cookie 执行此操作时,称为会话劫持。

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

document.cookie="COOKIENAME=cookievalue";

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

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

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

Cookie: COOKIENAME=cookievalue

服务器最初设置 cookie 是否有过期日期,但它不知道是否已更改,它并不关心。设置为下个月到期的 cookie 与计算机上的会话 cookie 之间没有功能上的区别,该计算机上的浏览器一直运行到下个月。

【讨论】:

    【解决方案2】:

    你完全正确。会话 cookie 会在浏览器关闭时被删除,而持久性 cookie 会在其到期时间结束时被删除。如果在浏览器关闭后会话仍然存在,他们的网站必须使用持久性 cookie。所有 cookie 都可以导出到另一台计算机。这是一个众所周知的安全漏洞,可通过使用 SSL 加以缓解。

    【讨论】:

    • 我相当肯定,SSL 只能防止网络/互联网中的会话劫持,即有人拦截了您未加密的 cookie 并使用它来“窃取”您的会话。但是,如果您导出会话 cookie,SSL 不会确保 cookie 仅在一个地方使用。
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2010-09-14
        • 1970-01-01
        • 1970-01-01
        • 2014-08-10
        • 1970-01-01
        • 2011-01-02
        • 2011-10-15
        • 2016-03-23
        • 1970-01-01
        相关资源
        最近更新 更多