ASP.NET 中的会话超时

Posted

技术标签:

【中文标题】ASP.NET 中的会话超时【英文标题】:Session timeout in ASP.NET 【发布时间】:2010-10-13 12:51:07 【问题描述】:

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

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

我仍然在 20 分钟时收到会话超时。我还有什么需要做的吗?

【问题讨论】:

请提供有关您如何测量 20 分钟的信息。让我们确定 20 分钟是会话超时,而不是其他类型的超时。 请使用赞成/反对箭头附近的复选标记将优质答案标记为已接受 八年后,正确答案仍未被接受。 请澄清 IIS 管理器/网站属性/ASP.NET 配置设置的含义。一步一步你在 IIS 中做了什么改变? 【参考方案1】:

您是否使用表单身份验证?

表单身份验证使用它自己的超时值(默认为 30 分钟)。表单身份验证超时会将用户发送到会话仍处于活动状态的登录页面。这可能看起来像您的应用程序在会话超时时所提供的行为,从而很容易将一个与另一个混淆。

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

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

将表单超时设置为小于会话超时可以为用户提供一个窗口,在该窗口中重新登录而不会丢失任何会话数据。

【讨论】:

【参考方案2】:

我不知道 web.config 或 IIS。 但我相信从 C# 代码中你可以做到这一点

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

【讨论】:

这只会调整当前会话的超时时间吗?或者这会调整整个应用程序的超时时间吗? documentation 中没有任何内容表明设置 Session.Timeout 与使用 web.config 或 IIS 有任何不同,因此我假设它适用于整个应用程序。 我认为@Drasive 是对的,但必须至少通过 2 个独立的连接客户端到服务器并检查空闲会话超时来证明。【参考方案3】:

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

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

使用以下链接获取带有弹出警报消息的会话超时。

Session Timeout Example

仅供参考:以上示例是使用 devexpress 弹出控件完成的,因此您需要使用普通弹出控件自定义/替换 devexpress 弹出控件。如果你使用 devexpress 不需要自定义

【讨论】:

cookieless false ? @Kiquenet,如果您将 cookieless 设置为 true,那么您的 sessionId 将嵌入在 URL 中,这是一个高安全风险。 ASP.NET 框架向 URL 插入一个唯一的 id,您可以通过禁用 cookie 或将 cookieless 属性设置为 true 来检查这一点。根据 MSDN,默认情况下,SessionID 值存储在浏览器中的非过期会话 cookie 中,但如果您指定 cookieless="true",则 ASP.NET 通过自动将唯一会话 ID 插入页面的 URL 来维护无 cookie 会话状态.【参考方案4】:

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

【讨论】:

我知道我们是 2020 年,但该死的这解决了我的问题,谢谢! @Binary9 这里也一样。尝试使用一些遗留的东西,但找不到所有会话超时原因。【参考方案5】:

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

另外,如果我没记错的话,IIS 中的超时只影响 .asp 页面,而不影响 .aspx。您确定 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"
/>

【讨论】:

【参考方案6】:

这通常就是你需要做的一切......

您确定 20 分钟后,会话丢失的原因是因为空闲...

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

您还可以阅读documentation for event messages 和关联的table of events。

【讨论】:

【参考方案7】:

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" />

【讨论】:

【参考方案8】:

如果您使用身份验证,我建议在 web.config 文件中添加以下内容。

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

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

【讨论】:

将其放入 web.config 后, 出现错误【参考方案9】:

由于 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"]));

【讨论】:

【参考方案10】:

您可以在 IIS 中找到设置:

可以在“ASP”下的服务器级别、网站级别或应用级别找到。

我认为您可以在此处将其设置为 web.config 级别。请自行确认。

<configuration>
   <system.web>

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

   </system.web>
</configuration>

【讨论】:

也在 Global.asax 中?【参考方案11】:

IIS 会话超时值仅适用于经典 .asp 应用程序,这由 IIS 配置控制。 在您的情况下,对于 ASP.NET 应用,只有 web.config 指定的超时值适用。

【讨论】:

IIS 的应用程序池超时怎么办?【参考方案12】:

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

对于托管在 IIS 8.5 网络上的每个站点,请遵循以下步骤

打开 IIS 8.5 管理器。

点击站点名称。

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

从配置顶部的“Section:”下拉列表中 编辑器,找到“system.web/sessionState”。

将“超时”设置为“00:20:00 或更小”,使用最小值 可能取决于应用程序。可接受的值为 5 高价值应用程序需要 10 分钟,中等价值应用程序需要 10 分钟 应用程序,低价值应用程序需要 20 分钟。

在“操作”窗格中,单击“应用”。

【讨论】:

【参考方案13】:

如果您希望网站的会话超时而不是删除

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

来自 web.config 文件的标记。

【讨论】:

【参考方案14】:

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

IIS 6.0:允许的最小值为 1 分钟,最大值为 1440 分钟。

Session.Timeout = 600;

【讨论】:

【参考方案15】:

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

【讨论】:

编辑 web.config 文件会自动导致 IIS 重置。

以上是关于ASP.NET 中的会话超时的主要内容,如果未能解决你的问题,请参考以下文章

如何在过期前延长asp.net中的会话超时

ASP.NET Core 会话超时

IIS 会话超时与 ASP.NET 会话超时

ASP.NET 窗体身份验证超时和会话超时

asp.net cookie、身份验证和会话超时

ASP.NET 中的会话固定