2013-03-17 65 views
0

我有这样的:ASP MVC - 随机会话超时

<membership defaultProvider="DefaultMembershipProvider" userIsOnlineTimeWindow="15"> 

这:

<sessionState mode="InProc" customProvider="DefaultSessionProvider" cookieless="UseCookies" regenerateExpiredSessionId="true" timeout="15"> 

而且我会在随机时间超时,我可以查看网页页面后,然后让注销,可能导致什么?

回答

1

你应该做一个区​​分ASP.NET会话之间:

<sessionState mode="InProc" customProvider="DefaultSessionProvider" cookieless="UseCookies" regenerateExpiredSessionId="true" timeout="15"> 

和窗体身份验证:

<authentication mode="Forms"> 
    <forms loginUrl="~/account/login" timeout="2800" /> 
</authentication> 

ASP.NET会话是存储在Web服务器的内存默认。这样做的问题在于,您的应用程序可能随时被Web服务器回收或取消,并且会话将会丢失。例如,如果您的服务器遇到一些CPU或内存阈值并且几乎不在您的控制范围内,就可能发生这种情况。如果需要以可靠的方式将某些内容存储到ASP.NET会话中,则应确保使用的是进程外状态(如StateServerSqlServer)。这里有一篇关于various session state modes的文章。

另一方面,表单身份验证用于使用Cookie跟踪经过身份验证的用户。它们不会保留在服务器上,也不会受到与ASP.NET会话相同的限制。如果您决定在您的应用程序中使用ASP.NET会话,则应确保其超时时间与表单身份验证cookie的超时时间相同,并且您使用的是超出proc持久性状态。

+0

'timeout =“2800”'这是在几秒钟内?我把这个设置为15,我认为这是在几分钟内? – ojek 2013-03-17 17:10:46

+0

再一次,不要将ASP.NET会话与表单身份验证混淆。这是两个完全不同的东西。但是,是的,[''](http://msdn.microsoft.com/en-us/library/vstudio/1d3t3c61(v = vs.90).aspx)节点的超时属性在几分钟内。并且[''](http://msdn.microsoft.com/zh-cn/library/h6bb9cz9(v = vs80).aspx)节点的'timeout'属性也在几分钟内。 – 2013-03-17 17:12:12

+0

嗯,是的,我知道会话和表单身份验证之间的区别,但是,如果我将表单身份验证超时设置为15,为什么我可以保持登录状态5分钟(无活动)而不会被丢弃? – ojek 2013-03-17 17:16:40