ASP.NET中的会话超时


163

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

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

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


1
请提供有关如何测量20分钟的信息。确保20分钟是会话超时,而不是其他类型。
约翰·桑德斯

11
请通过使用上/下箭头旁边的对勾标记将质量回答标记为接受
Brian Webster

3
八年后,正确答案仍然没有被接受。
内森

请阐明IIS管理器/网站属性/ASP.NET配置设置的含义。您逐步在IIS中做了哪些更改?
niico

Answers:


275

您正在使用表单身份验证吗?

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

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

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

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


@牢不可破的几分钟。
Word重新排列器

43

我不了解web.config或IIS。但我相信从C#代码中您可以做到

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

21
这只会调整当前会话的超时时间吗?还是会调整整个应用程序的超时时间?
Johncl

2
文档中没有任何内容表明该设置 Session.Timeout与使用web.config或IIS有所不同,因此我认为它适用于整个应用程序。
2015年

我认为@Drasive是正确的,但是必须至少由2个独立的连接客户端连接到服务器并检查空闲会话超时来证明。
QMaster

42

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

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

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

会话超时示例

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


无cookie的错误?
Kiquenet '18

3
@Kiquenet,如果将cookieless设置为true,则sessionId将被嵌入URL中,这具有很高的安全风险。ASP.NET框架将唯一的ID插入URL,您可以通过禁用cookie或将cookieless属性设置为true来进行检查。根据MSDN,默认情况下,SessionID值存储在浏览器中的非过期会话cookie中,但是如果您指定cookieless =“ true”,则ASP.NET会通过自动在页面URL中插入唯一的会话ID来保持无cookie会话状态。 。
Hamza Khanzada

8

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

8

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


我知道我们现在是2020年,但是该死的这只是解决了我的问题,谢谢!
Binary9

8

通常这就是您需要做的所有事情...

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

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

您还可以阅读事件消息文档以及相关的事件表


3

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

就我而言,超时后,用户将被重定向到登录页面:

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

我在这里<认证模式=“表单”>后,我把它在web.config中遇到错误
LST帕特里克


2

由于ASP.Net core 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"]));

2

您可以在IIS中找到设置:

设定值

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

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

<configuration>
   <system.web>

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

   </system.web>
</configuration>

还在Global.asax中吗?
Kiquenet

1

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


IIS的应用程序池超时如何处理?
SteveCav

1

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

对于IIS 8.5网站上托管的每个站点,请按照以下过程操作

IIS超时配置

打开IIS 8.5管理器。

单击站点名称。

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

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

将“超时”设置为“ 00:20:00或更小”,并根据应用程序使用尽可能低的值,可接受的值为:对于高价值应用程序为5分钟,对于中价值应用程序为10分钟,对于低价值应用程序为20分钟值的应用程序。

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



-1

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

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

Session.Timeout = 600;

-2

在IIS中更改会话超时值后,请重新启动IIS。为此,请转到命令提示符。键入IISRESET,然后按Enter。


编辑web.config文件会自动导致IIS重置。
蒂莫西·冈萨雷斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.