2010-08-19 35 views
8

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

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

请不要对我持续的问题感到恼火......我有很大的困惑。 我们说HTTP是一个无状态协议。一旦请求了页面,我已经登录。并且HTTP协议连接将在IIS和浏览器之间终止,对吧?然后,我正在浏览该登录的应用程序中的其他页面。现在IIS可以识别用户已经登录到这个浏览器。但是当我打开一个新的浏览器并请求该应用程序时,IIS如何识别它是一个新的请求?由于HTTP协议断开连接,它在第一种情况下如何工作?

+0

好的。另外我有另外一个疑问。假设iam没有关闭我登录的浏览器,并且我打开新的浏览器来请求来自同一应用程序的页面。现在iis如何认识到这是对应用程序的新请求并发送到登录页面。为什么不能使用第一个浏览器使用的现有会话或cookie – Bala 2010-08-19 11:49:30

+0

请参阅我的更新答案。 – cHao 2010-08-19 12:05:23

+0

非常感谢。请找我更新的问题,并帮助我 – Bala 2010-08-19 12:14:41

回答

29

正如你正确说,HTTP本身是无状态的,并且每个请求是从每一个其他技术上独立。网站使用的会话是解决这个问题的方法。通常会发生的情况是,服务器存储它在请求之间维护的任何信息(例如,登录用户的用户名和/或ID),并为该信息分配一个ID(称为“会话ID”)。然后它会通知浏览器会话ID,以便浏览器在发出另一个请求时可以将ID返回。如果浏览器发挥其作用并提供会话ID,则可以根据每个请求检索,更新存储的信息等,甚至在无状态协议上提供某种程度的状态。

会话通常使用cookie来实现。也就是说,服务器向浏览器提供一个带有会话ID的cookie,浏览器将这个cookie与每个请求一起回传,直到cookie过期或被忘记。一些cookie(所谓的“会话cookie”)不会被保存,并且在浏览器关闭时被遗忘。新打开的浏览器没有任何会话cookie可以通过,所以如果服务器使用会话cookie进行会话(它应该),它会认为用户还没有登录,并且如果他们需要跳转到登录页面

会话cookie通常会在同一个浏览器中的标签之间共享,甚至有时甚至可以由已经运行的浏览器的“文件>新窗口”打开的窗口共享,因为这两种情况通常会只是该浏览器的一部分。但是,如果您从“开始”菜单启动浏览器,或者操作系统允许您启动程序,则这是一个完整的其他过程 - 而且会话Cookie很少在进程之间共享。

在使用会话的每个请求之后,服务器通常也只会在有限的时间内(在几秒到几年的任意位置,取决于服务器和/或站点设置)记住会话。如果浏览器传递一个对应于该服务器不再记住的会话的cookie,它就会像没有会话那样工作。其中,如果您需要登录,则会再次跳转到登录页面。

+0

非常感谢帮助我的混乱 – Bala 2010-08-20 05:56:15

1

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

+0

我同意,但如何IIS知道浏览器已关闭,并且当我们再次请求该页面时,这是一个新请求 – Bala 2010-08-19 11:41:49

+3

@Bala:IIS不知道浏览器。这是浏览器在关闭时忘记临时会话cookie(因为它应该这样做),所以不能从新实例发送到IIS。没有cookie =没有会话。 – 2010-08-19 12:25:22

+0

非常感谢Hans – Bala 2010-08-20 05:56:50