2010-07-16 179 views
2

在此论坛中,有人提出了有关会话超时的问题。如果有人能够再次澄清这一点,将不胜感激。ASP.NET 2.0会话超时

我有一个asp.net 2.0应用程序,如果用户没有做任何活动并按下页面上的按钮(他被重定向到sessionExpired.aspx页面),说15-20分钟后超时。我在我的web.config文件中将会话超时设置为60分钟,但仍然以某种方式用户超时。

我有与此有关的会话超时优先级相关的另一个问题。 IIS会话超时优先于ASP.NET会话超时。说如果IIS会话超时设置为20分钟,并且ASP.NET会话超时为60分钟,则ASP.NET是否覆盖IIS会话超时。

回答

3

IIS优先,但他们处理稍有不同的情况。

对于IIS,应用程序池的默认20分钟超时是指传入请求。如果您的应用程序在20分钟内没有收到任何请求,则应用程序池将进入休眠状态以节省资源。发生这种情况时,应用程序中的所有会话都消失了。

ASP.NET会话超时处理每会话请求。您的网站可能非常繁忙,但如果一个用户(即会话)在20分钟内未处于活动状态,则只会丢弃该会话。

所以是的,要确保会话保持活动60分钟,您必须更改IIS应用程序池以及web.config的超时设置。

解决此问题的另一种方法是周期性地发送一个小的AJAX“ping”(即带有随机ID的页面请求以防止浏览器缓存)回服务器。这样,只要用户不关闭浏览器,会话将被保留。

+0

嗨pbz可以告诉我如何实现Ajax ping。 – Kannabiran 2010-07-21 23:51:47

+0

最简单的方法是设置web服务(asmx),然后通过ajax调用它;例如关于如何用jQuery来做到这一点http://www.ajaxlines.com/ajax/stuff/article/jquery_ajax_and_asmx.php 确保你记得为jquery ajax调用设置缓存为false。 如果用户登录或不登录,则可以从web服务返回;如果不是,那么你可以重定向到登录页面或警告他们他们不再登录(类似Gmail的做法)。 为了让它多次触发,你可以使用一个javascript定时器:http://stackoverflow.com/questions/460474/how-to-set-a-timer-in-javascript – pbz 2010-07-31 21:02:51