【问题标题】:How does IIS recognize different sessions in .NET?IIS 如何识别 .NET 中的不同会话?
【发布时间】:2010-08-19 11:34:48
【问题描述】:

假设我已经登录到一个从IIS 运行的应用程序。现在我还没有注销,而是关闭了浏览器。当我再次访问该应用程序时,它默认为登录页面。 IIS如何识别这是一个新请求并将用户重定向到登录页面?

我还有一个问题。假设我没有关闭登录时使用的浏览器。我打开新浏览器以从同一应用程序请求页面。 IIS 识别出这是对应用程序的新请求,并将用户重定向到登录页面。为什么它不使用第一个浏览器使用的现有会话或 cookie?

请不要对我不断提出的问题感到恼火……我很困惑。 我们说HTTP 是一个无状态协议。请求页面后,我已经登录。并且 IIS 和浏览器之间的 HTTP 协议连接将终止,对吗?然后我导航到该登录应用程序中的其他页面。现在 IIS 识别出用户已在此浏览器上登录。但是当我打开一个新浏览器并请求该应用程序时,IIS 如何识别它是一个新请求?既然HTTP协议是断开的,那么第一种情况是如何工作的呢?

【问题讨论】:

  • 好的。我还有一个疑问。假设我没有关闭我已登录的浏览器。并且我正在打开新浏览器以从同一应用程序请求页面。现在iis如何识别它是对应用程序的新请求并发送到登录页面。为什么它不能使用第一个浏览器使用的现有会话或cookies
  • 非常感谢 chao。请找到我更新的问题并帮助我
  • [试试我对同一个问题的回答][1] [1]:stackoverflow.com/a/20943824/1293175

标签: asp.net iis


【解决方案1】:

正如您所说的,HTTP 本身是无状态的,每个请求在技术上都是相互独立的。网站使用的会话是一种解决方法。通常情况下,服务器会存储它在请求之间维护的任何信息(例如登录用户的用户名和/或 ID),并为该信息分配一个 ID(称为“会话 ID”)。然后它告诉浏览器会话 ID,这样浏览器可以在需要发出另一个请求时交回 ID。如果浏览器发挥其作用并提供会话 ID,则存储的信息可以通过每个请求进行检索、更新等,即使在无状态协议上也可以提供某种程度的状态。

会话通常使用 cookie 实现。也就是说,服务器将带有会话 ID 的 cookie 交给浏览器,而浏览器在每次请求时交回相同的 cookie,直到 cookie 过期或被遗忘。一些 cookie(所谓的“会话 cookie”)没有保存,并且在浏览器关闭时被遗忘。新打开的浏览器没有要传递的会话 cookie,因此如果服务器使用会话 cookie 进行会话(它应该这样做),它会认为用户尚未登录并在需要时将其退回到登录页面登录。

会话 cookie 通常会在同一浏览器中的选项卡之间共享,有时甚至会被已在运行的浏览器中通过“文件 > 新窗口”打开的窗口共享,因为这两种情况通常只是那个浏览器。但是,如果您从“开始”菜单启动浏览器,或者您的操作系统允许您启动程序,那么它就是一个完全不同的进程——而且会话 cookie 很少在进程之间共享。

服务器通常也只会在每次使用会话的请求后在其端记住会话一段有限的时间(从几秒到几年,取决于服务器和/或站点设置)。如果浏览器传递了一个与服务器不再记住的会话相对应的 cookie,它将表现得好像根本没有会话一样。在您必须登录的情况下,它会再次跳到登录页面。

【讨论】:

    【解决方案2】:

    无论您是否登录,都会始终传递 cookie。它们被映射到 IIS 中的会话。

    【讨论】:

    • 我同意,但是当我们再次请求该页面时,IIS 是如何知道浏览器已关闭并且这是一个新请求
    • @Bala:IIS 不了解浏览器。浏览器在关闭时忘记了临时会话 cookie(应该这样做),因此无法从新实例将其发送到 IIS。没有 cookie = 没有会话。
    【解决方案3】:

    查看以下文章。它们可能会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多