在以下情况下会话会发生什么



如果会话存储在 proc 中

用户登录,直接关闭浏览器,一小时后重新打开。他需要再次登录吗?

  1. 如果网络应用程序使用 cookie 并且 cookie 在用户浏览器上启用...
  2. 如果网络应用程序使用持久性 Cookie 并且用户浏览器上启用了 Cookie...
  3. 如果网络应用程序使用 cookie 并且 cookie 在用户浏览器上被禁用...
  4. 如果网络应用程序使用持久性 cookie 并且在用户浏览器上禁用 cookie...

如果会话存储在状态服务器中并且情况相同,那么会发生什么?

创建会话时(假设它是正常会话(,会将一个 cookie 发送到浏览器,如下所示:

SESSION_ID=437b930db84b8079c2dd804a71936b5f

如果会话标识符(在上面的示例中为 437b930db84b8079c2dd804a71936b5f(作为请求参数而不是 cookie 传递,则可以在没有 cookie 的情况下使用会话;但是,这种情况相当罕见,通常被认为是不好的做法。

所有会话信息

都存储在服务器端,会话标识符在后台用于决定应为每个请求调用哪组信息(如果有(。因此,我们回答您的问题。

  1. 如果网络应用程序使用 cookie 并且 cookie 在用户浏览器上启用...

如果网络应用程序使用 cookie 并且在浏览器上启用了 cookie,那么应该没有问题。但是,使用标准会话实现时,cookie 将是非持久性的,因此如果用户完全关闭浏览器的所有实例,则需要再次登录。

  1. 如果网络应用程序使用持久性 Cookie 并且用户浏览器上启用了 Cookie...

如果会话 ID 存储在持久性 cookie 中,并且用户的浏览器通过将会话标识符 cookie 保存到磁盘来遵守这一点,则即使浏览器完全关闭并重新启动,会话标识符也会被发送。但是,请注意,大多数 Web 框架都有一个类似垃圾收集器的系统,该系统会删除在一定时间内显示任何活动的会话的数据。例如,假设我的网站至少每 4 小时需要活动一次才能保持会话活动。如果我登录,收到带有我的会话 ID 的持久 cookie,关闭浏览器,并在 5 小时后返回,那么我将需要再次登录,因为即使我的会话 ID cookie 是持久性的,我的会话信息也会从服务器中清除。

  1. 如果网络应用程序使用 cookie 并且 cookie 在用户浏览器上被禁用...

坏消息熊。您需要找到一种使用无 Cookie 会话的方法(将标识符作为每个请求的参数传递(,或者您需要要求用户启用 Cookie。这是没有办法的。

  1. 如果网络应用程序使用持久性 cookie 并且在用户浏览器上禁用 cookie...

与#3的情况相同。如果用户禁用了 cookie,那么您就不走运了。他们要么需要启用 Cookie(至少对于您的网站(,要么您需要找到另一种方式在请求之间传递信息。

会话存储在服务器内存中(除非使用状态服务器或持久存储(,但依赖于 cookie 来标识会话。如果 cookie 不可用,则会话将不起作用,因为无法识别用户。无 Cookie 会话可用于解决此问题。不建议使用无 Cookie 会话,因为它们可能会被 URL 中的会话标识符劫持。

如果未在 cookie 上设置过期时间,那么一旦用户关闭所有浏览器实例(它们共享内存(,而不仅仅是通过网站访问的浏览器实例,它就会丢失。

如果用户禁用了 Cookie,则应用程序无法使用 Cookie。人们现在不像 90 年代后期那样担心 cookie(许多"安全"人员发出警告,说 cookie 可用于在您的计算机上存储各种东西,甚至是病毒(。

相关内容

最新更新