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.cs
、void 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 中的会话超时的主要内容,如果未能解决你的问题,请参考以下文章