[英]How does the session timeout work in IIS 7?
在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挑战用户重新进行身份验证之前用户会话可以处于活动状态的最长时间。 显然,从这个测试,它不是。 任何人都可以向我解释一下吗? 另外,我如何设置上述情况的超时?
会话超时是一个滑动超时,每次用户访问服务器时都会将其重置为配置的值。
如果在这段时间内没有向您的应用程序发出请求,则应用程序空闲超时将启动。
因此通常的情况是:
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会话状态,并确保已配置machine.key,以便每次服务器重新启动时都不是AutoGenerated。
如果您使用标准ASP.NET机制进行身份验证,那么ASP.NET将向每个用户发出两个cookie:
这两个cookie都使用MachineKey加密 - 因此,如果您的应用程序回收并生成新密钥,则这些令牌都不能被解密,要求用户登录并创建新会话。
回应评论:
Session.Add(string, object)
方法放置在用户会话对象( HttpSessionState )中的项目有关。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.