0

我有这个:

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

还有这个:

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

我的会话随机超时,我可以一页一页地查看然后退出,这可能是什么原因?

4

1 回答 1

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 会话中,则应确保您使用的是进程外状态(例如StateServerSqlServer)。这是一篇关于various session state modes.

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

于 2013-03-17T17:08:22.863 回答