【问题标题】:What would happen with session in the following situations?在以下情况下 session 会发生什么?
【发布时间】:2016-05-19 12:50:47
【问题描述】:

如果会话存储在 proc 中

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

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

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

【问题讨论】:

    标签: asp.net session cookies


    【解决方案1】:

    当一个会话被创建时(假设它是一个普通会话),一个 cookie 被发送到浏览器,看起来像这样:

    SESSION_ID=437b930db84b8079c2dd804a71936b5f
    

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

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

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

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

    1. 如果 Web 应用程序使用持久性 cookie 并且在用户浏览器上启用了 cookie...

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

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

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

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

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

    【讨论】:

    • 如果会话不是存储在进程内而是分开存储,会不会一样?此外,当应用程序已经创建并依赖于会话 cookie 时,当用户禁用 cookie 时它将如何工作?还有一点,如果用户在关闭浏览器时设置了浏览器清除cookies,那么持久cookies中的数据会丢失吗?
    • @stylojack_10,我已经很多年没有使用过 ASP.NET 框架了,但是在对 InProc 进行了简短的搜索之后,会话是否存储在 InProc 中应该无关紧要。唯一会产生影响的情况是本地 Web 服务器重新启动(在这种情况下,内存将被重置并且所有会话数据都将丢失)。正如我的回答中所述,如果用户禁用了 cookie 并且网络应用程序依赖于 cookie,那么网络应用程序将无法正常运行。此外,如果浏览器在退出时清除 cookie,那么我们可以预期所有持久性 cookie 都将丢失。
    【解决方案2】:

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

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

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

    【讨论】:

    • “如果 cookie 不可用,则会话将无法工作”...是什么意思?在这种情况下会发生什么?用户每次打开网站时都必须登录吗?跨标签呢?
    • 这意味着系统无法将浏览器绑定到为该特定浏览器会话存储的会话数据。如果用户登录,您可以在登录表单中为该用户设置会话变量,重定向到另一个页面,如果该页面在会话中检查用户名变量,它将不存在。交叉表是无关紧要的,因为它只是浏览器的实例,它们都共享一个 cookie 池。最重要的是,如果没有 cookie,那么您将无法安全地进行会话。此外,请查看成员资格或身份系统,因为它们提供了比将用户名存储在会话中更好的选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 2020-01-26
    相关资源
    最近更新 更多