IIS 7中的会话超时如何工作?

时间:2012-02-21 21:48:03

标签: asp.net iis-7 timeout session-state

在web.config中,我将sessionState中的超时设置为20分钟。根据MSDN,此超时指定会话在被放弃之前可以空闲的分钟数。在IIS 7中,DefaultWebSite->会话状态 - > Cookie设置 - >超时自动填充web.config中设置的超时值,在我的情况下是20分钟。此外,应用程序池 - > DefaultAppPool->高级设置 - > idleTimeout,我将其设置为10分钟。

然后我做了两个测试: 第一次测试:我在下午3:45登录我的网络应用程序,闲置10分钟。下午3:55,我试图使用我的应用程序,我被踢了出去。我认为idleTimeout正在发挥作用。

第二次测试:我在下午4:00登录我的网络应用程序,在下午4:05,下午4:10,下午4:15和下午4:20使用该应用程序。我预计会在下午4:20被踢出局。但我不是。我认为IIS 7中的会话状态超时(20分钟)是Web Agent挑战用户重新进行身份验证之前用户会话可以处于活动状态的最长时间。显然,从这个测试,它不是。任何人都可以向我解释一下吗?另外,我如何设置上述情况的超时?

1 个答案:

答案 0 :(得分:37)

会话超时是一次滑动超时,每次访问服务器时都会为用户重置为配置的值。

如果在这段时间内没有向您的申请提出申请,则申请空闲超时开始。

通常的情况是:

Time  | User A       | User B       | Session States
------+--------------+--------------+-------------------------------------------
12:00 | Visits Page1 |              | A: New Session, Time-out: 20 minutes
12:02 | Visits Page2 |              | A: Time-out reset: 20 minutes
12:10 |              | Visits Page1 | A: Time-out: 12 min; B: New: 20 minutes
12:15 |              | Visits Page2 | A: Time-out: 07 min; B: Time-out: 20 min
12:22 |              |              | A: times out; B: 13 min remaining
12:32 |              |              | Application Shuts Down (Idle time reached)
12:35 | Visits Page3 |              | A: New Session Starts

如果用户A在12:22之后返回该网站,他们将会有一个全新的会话,而您之前存储的任何值都会丢失。

确保会话在应用程序重新启动时持续存在的唯一方法是配置SessionState服务或SQL会话状态,并确保您configured the machine.key以便每次服务器重新启动时都不是AutoGenerated。 / p>

如果您使用标准的ASP.NET机制进行身份验证,那么ASP.NET将向每个用户发出两个cookie:

  1. 身份验证令牌:由Authentication time-out设置控制,允许用户在Cookie未过期时自动登录到您的站点,可以修复或滑动,默认为30分钟,这意味着他们的身份验证令牌可以应对比其会话更长的“空闲”时段。
  2. 会话令牌:由会话超时设置控制,允许您的应用在访问生命周期内存储和访问每个用户的值。
  3. 这两个cookie都使用MachineKey进行加密 - 因此,如果您的应用程序回收并生成新密钥,则这些令牌都不能被解密,要求用户登录并创建新会话。


    回应评论:

    1. 20分钟的会话超时与您使用Session.Add(string, object)方法放置在用户会话对象(HttpSessionState)中的项目有关。
    2. 这取决于。如果您正确configured the machine.key身份验证令牌仍然有效,如果您的会话不再是“InProc”,那么这些会话也会在应用程序重新启动后仍然存在且仍然可读 - 请参阅说明上方。