我在IIS 6.0中运行ASP.NET 2.0应用程序 . 我希望会话超时为60分钟,而不是默认的20分钟 . 我做了以下事情
在web.config中设置
在IIS管理器/网站属性/ ASP.NET配置设置中将会话超时设置为60分钟
在应用程序池属性/性能中将空闲超时设置为60分钟 .
我仍然在20分钟时获得会话超时 . 还有什么我需要做的吗?
如果您使用身份验证,我建议在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" />
你在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" />
你在使用Forms身份验证吗?
表单身份验证使用自己的超时值(默认为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>
使用以下链接进行会话超时和弹出警报消息 .
Session Timeout Example
仅供参考:以上示例使用devexpress弹出控件完成,因此您需要使用正常的弹出控件自定义/替换devexpress弹出控件 . 如果您使用devexpress无需自定义
我不知道web.config或IIS . 但我相信,从C#代码中你可以做到这一点
Session.Timeout = 60; // 60 is number of minutes
这通常都是你需要做的......
你确定在20分钟之后,会话丢失的原因是因为闲置...
关于 Session 可能被清除的原因有很多 . 您可以为IIS启用事件日志记录,然后可以使用事件查看器查看会话被清除的原因...您可能会发现它可能是出于其他原因?
您还可以阅读documentation for event messages和相关的table of events .
在我的情况下,它是应用程序池 . 它被设置为在空闲xx分钟时重新启动 . 当我将其设置为不重新启动时,它似乎使用来自Web Config的值 .
您可以在IIS中找到此设置:
它可以在“ASP”下的服务器级别,网站级别或应用程序级别找到 .
我想你可以在web.config级别设置它 . 请亲自确认一下 .
<configuration> <system.web> <!-- Session Timeout in Minutes (Also in Global.asax) --> <sessionState timeout="1440"/> </system.web> </configuration>
由于ASP.Net核心1.0(vNext或其他任何名称)会话的实现方式不同 . 我使用以下方法更改了 Startup.cs , void ConfigureServices 中的会话超时值:
Startup.cs
void ConfigureServices
services.AddSession(options => options.IdleTimeout = TimeSpan.FromSeconds(42));
或者,如果您想使用 appsettings.json 文件,您可以执行以下操作:
appsettings.json
// Appsettings.json "SessionOptions": { "IdleTimeout": "00:30:00" } // Startup.cs services.AddSession(options => options.IdleTimeout = TimeSpan.Parse(Config.GetSection("SessionOptions")["IdleTimeout"]));
IIS会话超时值仅适用于经典.asp应用程序,这是在IIS配置上控制的 . In your case For ASP.NET apps, only the web.config-specified timeout value applies.
如果你想要网站的会话超时而不是删除
<authentication mode="Forms"> <forms timeout="50"/> </authentication>
来自web.config文件的标记 .
Timeout属性指定分配给应用程序的Session对象的超时时间(以分钟为单位) . 如果用户在超时期限内没有刷新或请求页面,则会话结束 .
IIS 6.0:允许的最小值为1分钟,最大值为1440分钟 .
Session.Timeout = 600;
在IIS中更改会话超时值后,请重新启动IIS . 要实现此目的,请转到命令提示符 . 键入IISRESET并按Enter键 .
14 回答
如果您使用身份验证,我建议在web.config文件中添加以下内容 .
在我的情况下,用户在超时时被重定向到登录页面:
https://usefulaspandcsharp.wordpress.com/tag/session-timeout/
你在machine.config中有什么可能生效吗?在web.config中设置会话超时应覆盖IIS或machine.config中的任何设置,但是,如果应用程序的子文件夹中有某个web.config文件,则该设置将覆盖应用程序根目录中的设置 .
另外,如果我没记错的话,IIS中的超时只会影响.asp页面,而不会影响.aspx . 您确定web.config中的会话代码是否正确?它应该看起来像:
你在使用Forms身份验证吗?
表单身份验证使用自己的超时值(默认为30分钟) . 表单身份验证超时会将用户发送到登录页面,会话仍处于活动状态 . 这可能看起来像您的应用程序在会话超时时提供的行为,从而容易将其中一个与另一个混淆 .
将表单超时设置为小于会话超时的值可以为用户提供一个窗口,可以在其中重新登录而不会丢失任何会话数据 .
在web.config文件中使用以下代码块 . 默认会话超时为80分钟 .
使用以下链接进行会话超时和弹出警报消息 .
Session Timeout Example
仅供参考:以上示例使用devexpress弹出控件完成,因此您需要使用正常的弹出控件自定义/替换devexpress弹出控件 . 如果您使用devexpress无需自定义
我不知道web.config或IIS . 但我相信,从C#代码中你可以做到这一点
这通常都是你需要做的......
你确定在20分钟之后,会话丢失的原因是因为闲置...
关于 Session 可能被清除的原因有很多 . 您可以为IIS启用事件日志记录,然后可以使用事件查看器查看会话被清除的原因...您可能会发现它可能是出于其他原因?
您还可以阅读documentation for event messages和相关的table of events .
在我的情况下,它是应用程序池 . 它被设置为在空闲xx分钟时重新启动 . 当我将其设置为不重新启动时,它似乎使用来自Web Config的值 .
您可以在IIS中找到此设置:
它可以在“ASP”下的服务器级别,网站级别或应用程序级别找到 .
我想你可以在web.config级别设置它 . 请亲自确认一下 .
由于ASP.Net核心1.0(vNext或其他任何名称)会话的实现方式不同 . 我使用以下方法更改了
Startup.cs
,void ConfigureServices
中的会话超时值:或者,如果您想使用
appsettings.json
文件,您可以执行以下操作:IIS会话超时值仅适用于经典.asp应用程序,这是在IIS配置上控制的 . In your case For ASP.NET apps, only the web.config-specified timeout value applies.
如果你想要网站的会话超时而不是删除
来自web.config文件的标记 .
Timeout属性指定分配给应用程序的Session对象的超时时间(以分钟为单位) . 如果用户在超时期限内没有刷新或请求页面,则会话结束 .
在IIS中更改会话超时值后,请重新启动IIS . 要实现此目的,请转到命令提示符 . 键入IISRESET并按Enter键 .