您应该区分 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 的超时相同,并且您使用的是进程外持久状态。