在我的应用程序中,我使用表单身份验证和会话。如何确保用户在 6 小时后退出?
在我的 web.config 中,我将会话超时设置为 360 分钟。但在 10 分钟不活动后,我必须再次登录。
我还将表单身份验证超时设置为 360 分钟。我做错了什么?
在我的应用程序中,我使用表单身份验证和会话。如何确保用户在 6 小时后退出?
在我的 web.config 中,我将会话超时设置为 360 分钟。但在 10 分钟不活动后,我必须再次登录。
我还将表单身份验证超时设置为 360 分钟。我做错了什么?
还有一些其他超时值会影响会话超时。我想到的其中之一是工作进程超时(从 IIS 设置)。工作进程的默认超时时间为 20 分钟,因此如果您的站点在 20 分钟内没有任何活动,那么如果您在 InProc 模式下使用会话,工作进程将结束并导致您的会话结束。因此,您可能还需要将 Worker Process 的超时值设置为 360 分钟。
试试这个设置:
<authentication mode="Forms"> <forms timeout="360" slipExpiration="true"/> </authentication>
还要检查几件事:
如果您的 FormsAuthenticationTicket 是使用较低的 cookie 超时值创建的,则可能会覆盖
如果应用程序池“关闭工作进程”间隔较低,则会更早重置状态
除了设置会话超时之外,您还可以实现一种机制来保持会话处于活动状态,例如:刷新页面或进行 ajax 调用等。
您可以通过实现最大登录时间来添加此功能,可以检查等
您需要调整timeout和slipExpiration:
<authentication mode="Forms">
<forms requireSSL="false"
defaultUrl="Default.aspx"
loginUrl="Login.aspx"
path="/"
slidingExpiration="false"
timeout="360"
name=".ASPXFORMSAUTH">
</forms>
</authentication>
分步说明 为单个应用程序池配置空闲工作进程页面输出 1.打开 IIS 管理器。
2. 在 Connections 窗格中选择 Applications Pools,在 Application Pool 窗格中选择一个应用程序池,然后在 Actions 窗格中单击 Advanced Settings...。
3.在高级设置对话框中,在进程模型下,可选择将空闲超时值从默认的 20 分钟设置为不同的时间段。
4.单击确定。
你在使用 InProc 会话吗?(这是 ASP.net AFAIK 上的默认设置)在这种情况下,请检查您的应用程序池是否回收,因为这将终止所有会话。我没有要检查的 IIS,但我相信它已配置为在给定时间内空闲时关闭应用程序池 - 如果这是您的开发服务器,那么您可能已经空闲太久以至于 AppPool 回收并且您的 InProc 会话被杀死了?
我不确定快速实现 stateserver 或 sqlserver 而不是 inproc 有多么容易,但这里是MSDN Page about Session State。