在web.config中,我将sessionState中的超时设置为20分钟。根据MSDN的说法,此超时指定会话在被放弃之前可以空闲的分钟数。在IIS7中,DefaultWebSite->Session State->Cookie Settings->Time Out会自动填充web.config中设置的超时值,在我的例子中是20分钟。另外,应用程序池->DefaultAppPool->高级设置->idleTimeout,我将其设置为10分钟。
然后我做了两个测试:第一个测试:我在下午3:45登录了我的web应用程序,闲置了10分钟。下午3点55分,我试图使用我的应用程序,我被踢出去了。我认为idleTimeout起到了作用。
第二个测试:我在下午4:00登录我的web应用程序,在4:05 at、4:10 at、4:15 at和4:20 at玩应用程序我以为下午4点20分就会被踢出去但我不是。我认为IIS7中的会话状态超时(20min)是Web代理质询用户重新进行身份验证之前用户会话可以处于活动状态的最长时间。显然,从这个测试来看,情况并非如此。有人能给我解释一下吗?另外,我如何设置上述情况的超时时间?
发布于 2012-02-22 05:49:54
会话超时是一种滑动超时,用户每次访问服务器时都会将其重置为配置的值。
如果在该时间段内没有对应用程序的请求,则会启动应用程序空闲超时。
因此,通常的情况是:
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。
如果您使用标准的ASP.NET机制进行身份验证,那么ASP.NET将向每个用户发出两个cookies:
这两个cookie都是使用MachineKey加密的-因此,如果您的应用程序回收并生成新的密钥,这些令牌中的任何一个都无法解密,这需要用户登录并创建一个新会话。
回复评论:
Session.Add(string, object)方法放置在users会话对象(HttpSessionState)中的项目相关。https://stackoverflow.com/questions/9385716
复制相似问题