ASP.NET中的会话超时

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

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

20分钟后,我仍然得到一个会话超时。 还有什么我需要做的?

你使用表单身份验证?

表单身份验证使用它自己的超时值(默认30分钟)。 表单认证超时会将用户发送到会话仍处于活动状态的登录页面。 这可能看起来像你的应用程序在会话超时时的行为,使得彼此容易混淆。

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

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

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

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

使用以下链接进行会话超时,并弹出警告消息。

会话超时示例

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

我不知道关于web.config或IIS。 但我相信,从C#代码你可以这样做

 Session.Timeout = 60; 

这通常是你需要做的一切…

你确定20分钟后,会话正在失去的原因是从闲置,但…

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

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

你有没有在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" /> 

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

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

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

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

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会话超时值仅适用于经典的.asp应用程序,这是在IIS配置上进行控制的。 在你的情况下对于ASP.NET应用程序,只有web.config指定的超时值适用。

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

设置

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

我想你可以在web.config这里设置它。 请亲自确认一下。

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

如果您希望会话超时的网站比删除

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

标签从web.config文件。

由于ASP.Net核心1.0(vNext或任何名称用于它)会话实现不同。 我更改了Startup.cs的会话超时值, void ConfigureServices using:

 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对象的超时期限,以分钟为单位。 如果用户在超时期限内没有刷新或请求页面,则会话结束。

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

 Session.Timeout = 600; 

在IIS中更改会话超时值后,请重新启动IIS。 为了达到这个目的,进入命令提示符 输入IISRESET,然后按Enter键。