ASP.NET 中的会话超时

我在 IIS 6.0中运行 ASP.NET 2.0应用程序。我希望会话超时为60分钟,而不是默认的20分钟。我已经做了以下事情

  1. 设定 <sessionState timeout="60"></sessionState>web.config
  2. 在 IIS 管理器/网站属性/ASP.NET 配置设置中将会话超时设置为60分钟。
  3. 在应用程序池属性/性能中将空闲超时设置为60分钟。

我仍然有20分钟的休息时间,还有什么需要我做的吗?

534643 次浏览

这通常就是你需要做的。

您确定在20分钟后,会话丢失的原因是由于空闲..。

会话可能被清除的原因有很多。您可以为 IIS 启用事件日志记录,然后可以使用事件查看器查看会话被清除的原因... ... 您可能会发现它是出于其他原因?

您还可以读取 事件消息的文档和相关的 事件表

我不知道 web.config 或 IIS。 但是我相信通过 C # 代码你可以这样做

Session.Timeout = 60; // 60 is number of minutes

在 machine.config 中有可能生效的东西吗?在 web.config 中设置会话超时应该覆盖 IIS 或 machine.config 中的任何设置,但是,如果在应用程序的子文件夹中有一个 web.config 文件,该设置将覆盖应用程序根目录中的设置。

另外,如果我没记错的话,IIS 中的超时仅影响。ASP 页面,没有。阿斯伯格综合症。您确定 web.config 中的会话代码是正确的吗?它应该是这样的:

<sessionState
mode="InProc"
stateConnectionString="tcpip=127.0.0.1:42424"
stateNetworkTimeout="60"
sqlConnectionString="data source=127.0.0.1;Integrated Security=SSPI"
cookieless="false"
timeout="60"
/>

是否使用窗体身份验证?

Forms 身份验证使用它自己的超时值(30分钟)。默认情况下)。窗体身份验证超时将把用户发送到会话仍处于活动状态的登录页面。这可能看起来像是当会话超时时应用程序给出的行为,这使得它很容易混淆其中一个。

<system.web>
<authentication mode="Forms">
<forms timeout="50"/>
</authentication>


<sessionState timeout="60"  />
</system.web>

将窗体超时设置为小于会话超时的值,可以为用户提供一个窗口,用于在不丢失任何会话数据的情况下重新登录。

更改 IIS 中的会话超时值后,请重新启动 IIS。 要实现这一点,请转到命令提示符。键入 IISRESET 并按回车键。

在 web.config 文件中使用以下代码块。 这里的默认会话超时时间为80分钟。

<system.web>
<sessionState mode="InProc" cookieless="false" timeout="80" />
</system.web>

对于带有弹出警报消息的会话超时,请使用以下链接。

会话超时示例

仅供参考: 上面的例子是使用 devExpresspopup 控件完成的,因此您需要用普通的 popup 控件定制/替换 devExpresspopup 控件。如果您使用 devExpress 不需要自定义

如果您正在使用 Authentication,我建议在 web.config 文件中添加以下内容。

在我的例子中,用户在超时后会被重定向到登录页面:

<authentication mode="Forms">
<forms defaultUrl="Login.aspx" timeout="120"/>
</authentication>

在我的情况下,它是应用程序池。它被设置为在 xx 分钟空闲时重新启动。当我将它设置为不重新启动时,它似乎使用了来自 WebConfig 的值。

如果你想为网站会话超时比删除

<authentication mode="Forms">
<forms timeout="50"/>
</authentication>

来自 web.config 文件的标记。

由于 ASP.Net 核心1.0(使用 vNext 或其他名称)会话的实现方式不同。 我使用以下方法更改了 Startup.csvoid ConfigureServices中的会话超时值:

services.AddSession(options => options.IdleTimeout = TimeSpan.FromSeconds(42));

或者,如果你想使用 appsettings.json文件,你可以这样做:

// Appsettings.json
"SessionOptions": {
"IdleTimeout": "00:30:00"
}


// Startup.cs
services.AddSession(options => options.IdleTimeout = TimeSpan.Parse(Config.GetSection("SessionOptions")["IdleTimeout"]));

Timeout 属性指定分配给应用程序的 Session 对象的超时时间(以分钟为单位)。如果用户没有在超时期限内刷新或请求页,则会话结束。

IIS6.0: 允许的最小值为1分钟,最大值为 1440分钟。

Session.Timeout = 600;

IIS 会话超时值只适用于经典.asp 应用程序,这是在 IIS 配置上控制的。 对于 ASP.NET 应用程序,只应用 web.config 指定的超时值。

您可以在 IIS 中找到这个设置:

Settings

它可以在服务器级别,网站级别,或应用程序级别下的“ ASP”。

我想你可以在这里把它设置为 web.config 级别,请自己确认一下。

<configuration>
<system.web>


<!-- Session Timeout in Minutes (Also in Global.asax) -->
<sessionState timeout="1440"/>


</system.web>
</configuration>

Https://usefulaspandcsharp.wordpress.com/tag/session-timeout/

<authentication mode="Forms">
<forms loginUrl="Login.aspx" name=".ASPXFORMSAUTH" timeout="60" slidingExpiration="true" />
</authentication>


<sessionState mode="InProc" timeout="60" />

默认会话超时在 IIS 中定义为20分钟

对于托管在 IIS8.5 Web 上的每个站点,请遵循以下步骤

IIS Timeout configuration

打开 IIS8.5管理器。

单击网站名称。

在“管理”部分选择“配置编辑器”。

来自配置顶部的“ Section:”下拉列表 编辑器,定位“ system.web/sessionState”。

使用最低值将“ timeout”设置为“00:20:00 or less” 视乎应用程式而定,可接受的数值为5 高价值的申请需时10分钟,中等价值的申请需时10分钟 应用程序,以及20分钟的低价值应用程序。

在“操作”面板中,单击“应用”。