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

GLP*_*GLP 25 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挑战用户重新进行身份验证之前用户会话可以处于活动状态的最长时间.显然,从这个测试,它不是.任何人都可以向我解释一下吗?另外,我如何设置上述情况的超时?

Zha*_*uid 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

  1. 身份验证令牌:由身份验证超时设置控制,允许用户自动登录到您的站点,如果cookie未过期,可以修复或滑动,默认为30分钟,这意味着他们的身份验证令牌可以应对比他们的会议更长的"闲置"时期.
  2. 会话令牌:由会话超时设置控制,允许您的应用程序在访问的生命周期内存储和访问每个用户的值.

这两个cookie都使用MachineKey加密 - 因此,如果您的应用程序回收并生成新密钥,则这些令牌都不能被解密,这要求用户登录并创建新会话.


回应评论:

  1. 20分钟的会话超时与您使用该方法放置在用户会话对象(HttpSessionState)中的项目有关Session.Add(string, object).
  2. 那要看.如果您已正确配置machine.key,则身份验证令牌仍然有效,如果您的会话不再是"InProc",那么这些会话也将在应用程序重新启动时保持不变并且仍然可读 - 请参阅上面的注释.