我有这个:
<membership defaultProvider="DefaultMembershipProvider" userIsOnlineTimeWindow="15">
和此:
<sessionState mode="InProc" customProvider="DefaultSessionProvider" cookieless="UseCookies" regenerateExpiredSessionId="true" timeout="15">
我的会话在随机时间超时,我可以逐页查看,然后退出,可能导致什么?
答案 0 :(得分:1)
您应该区分ASP.NET Session:
<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会话中,则应确保使用进程外状态(例如StateServer
或SqlServer
)。这是一篇关于various session state modes
。
另一方面,表单身份验证用于使用Cookie跟踪经过身份验证的用户。它们不会持久存储在服务器上,也不会受到与ASP.NET会话相同的限制。如果您决定在应用程序中使用ASP.NET会话,则应确保其超时与表单身份验证cookie的超时相同,并且您使用的是超出proc持久性状态。