2012-12-08 38 views
1

我们已经一个ASP.Net Web应用程序建立在web.config中(我们使用形式基本验证)与MVC 3,我们已经配置了会话超时 -ASP.Net MVC保持会话活着,只要可能

<forms loginUrl="~/Common/Login" path="/" protection="All" timeout="180" requireSSL="false" slidingExpiration="true" defaultUrl="~/Common/Login" cookieless="UseDeviceProfile" enableCrossAppRedirects="false" /> 

事情一直正常,但我们上班后员工开始使用它像一个典型的Windows应用程序。 “登录”一次,并保持Web应用程序页面打开,直到他们工作,有时甚至超过几个小时。 Web应用程序具有典型的回发页面以及基于AJAX的部分和文件上传。

最近对用户活动日志的一些调试和审查表明,这导致了一些意外的回发和服务器端处理。

你会建议保持会话多久?我们还将imp数据存储在服务器端会话对象中。定期页面刷新可以成为解决方案吗?

回答

1

表单身份验证票证有效性和ASP.NET会话有效性之间存在差异。那些是2完全不相关的东西。您在问题中显示的是表单验证票证有效期,您已将其设置为180分钟,并且过期失效。

你会建议多长时间保持会话存活?

ASP.NET会话(如果您使用任何)和表单身份验证票证超时都应设置为相同的值。无论是长时间保持会话还是周期性地ping服务器以保持会话活跃,都将完全相同。因此,您最好将超时设置为足够高的值,而不是用定期请求篡改服务器。

这就是说,如果您使用ASP.NET Session,并且您正在存储此会话InProc,则应该知道Web服务器可以随时决定是否回收您的应用程序。例如,如果某些CPU /内存阈值被击中,则可能发生这种情况。发生这种情况时,如果将会话存储在内存中,则无论设置超时值多长时间,都会丢失所有信息。在这种情况下,您应该考虑使用进程外分布式会话存储。

+0

感谢您的评论,我知道我们可以恢复表单身份验证(http://madalgo.au.dk/~jakobt/wkhtmltoxdoc/wkhtmltopdf-0.9.9-doc.html),但我很担心我的数据在会话对象中 - 所以最终它关于我能保持活着多久。我们没有太多的用户或服务器负担过重,所以只需要找到延长会话的方法,或者当他回来时以某种方式通知空闲的用户会话超时。 –

+0

是的,如果你想要将数据存储在Web场景中的Session对象中,你将不得不使用一个进程外会话提供程序,否则IIS注定会在任何时候回收你的数据。 –

+0

所以,正如你所说,这个寒暄帮助我“延长我的会议”http://adventuresdotnet.blogspot.in/2009/06/aspnet-moving-session-out-of-process.html –