Asp.net 会话超时在IIS 7中是如何工作的?

Asp.net 会话超时在IIS 7中是如何工作的?,asp.net,iis-7,timeout,session-state,Asp.net,Iis 7,Timeout,Session State,在web.config中,我将sessionState中的超时设置为20分钟。根据MSDN,此超时指定会话在放弃之前可以空闲的分钟数。在IIS 7中,默认网站->会话状态->Cookie设置->自动超时将由web.config中设置的超时值填充,在我的示例中为20分钟。另外,应用程序池->默认应用程序池->高级设置->idleTimeout,我将其设置为10分钟 然后我做了两个测试: 第一个测试:我在下午3:45登录了我的web应用程序,空闲了10分钟。下午3点55分,我试图使用我的应用程序,结

在web.config中,我将sessionState中的超时设置为20分钟。根据MSDN,此超时指定会话在放弃之前可以空闲的分钟数。在IIS 7中,默认网站->会话状态->Cookie设置->自动超时将由web.config中设置的超时值填充,在我的示例中为20分钟。另外,应用程序池->默认应用程序池->高级设置->idleTimeout,我将其设置为10分钟

然后我做了两个测试: 第一个测试:我在下午3:45登录了我的web应用程序,空闲了10分钟。下午3点55分,我试图使用我的应用程序,结果被踢了出去。我认为空闲时间是起作用的


第二个测试:我在下午4:00登录我的web应用程序,在下午4:05、4:10、4:15和4:20玩应用程序。我以为下午4点20分会被踢出去。但我不是。我认为IIS 7中的会话状态超时(20min)是Web代理挑战用户重新身份验证之前用户会话可以处于活动状态的最长时间。显然,从这次测试来看,情况并非如此。谁能给我解释一下吗?此外,我如何设置上述情况的超时?

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

如果在这段时间内没有对应用程序的请求,则应用程序空闲超时开始

因此,通常的情况是:

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会话状态,并确保在每次服务器重新启动时不会自动生成会话

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

  • 身份验证令牌:由设置控制,允许用户在cookie未过期的情况下自动登录到您的站点,这可以是固定的或滑动的,默认为30分钟,这意味着他们的身份验证令牌可以处理比他们的会话更长的“空闲”时间
  • 会话令牌:由会话超时设置控制,允许您的应用程序在用户访问的生命周期内存储和访问每个用户的值
  • 这两个cookie都是使用MachineKey加密的——因此,如果应用程序回收并生成新密钥,则这些令牌都无法解密,从而需要用户登录并创建新会话


    答复评论:

  • 20分钟会话超时与您使用
    session.Add(string,object)
    方法放置在用户会话对象()中的项目有关
  • 那要看情况。如果您正确选择,身份验证令牌仍将有效,如果您的会话不再是“InProc”,则这些令牌也将在应用程序重新启动时持续存在,并且仍然可读-请参阅上面的注释

  • 但是为什么我在第二次测试期间不需要重新登录?因为每次访问服务器时,计时器都会重置-根据我的表格。谢谢Zhaph,我还有两个问题,(1)20分钟会影响什么?(2) 应用程序关闭后,B是否必须重新登录?顺便说一句,我刚刚检查了我的web.config,我们将表单超时设置为2880分钟。因此它不会引起任何问题:)谢谢您的回复。我只是想在我的环境中复制你的测试。有趣的是,12点22分,A的时间到了,但不知何故A没有被踢出。我怀疑空闲超时是由B重置的。你能告诉我哪些设置出错了吗?