ASP.NET中的会话超时

klo*_*one 156 asp.net session timeout

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

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

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

Hec*_*Mac 271

你在使用Forms身份验证吗?

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

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

    <sessionState timeout="60"  />
</system.web>
Run Code Online (Sandbox Code Playgroud)

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


Ram*_*y M 40

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

<system.web>
 <sessionState mode="InProc" cookieless="false" timeout="80" />
</system.web>
Run Code Online (Sandbox Code Playgroud)

使用以下链接进行会话超时和弹出警报消息.

会话超时示例

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

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

Dmi*_*ris 38

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

Session.Timeout = 60; // 60 is number of minutes
Run Code Online (Sandbox Code Playgroud)

  • 这只会调整当前会话的超时吗?或者这会调整整个应用程序的超时? (21认同)
  • [文档](https://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.timeout%28v=vs.110%29.aspx) 中没有任何内容表明设置`Session.Timeout ` 与使用 web.config 或 IIS 有任何不同,所以我认为它适用于整个应用程序。 (2认同)

dav*_*eps 8

这通常都是你需要做的......

你确定在20分钟之后,会话丢失的原因是因为闲置...

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

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


小智 8

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

  • 我知道我们已经 2020 年了,但这该死的刚刚解决了我的问题,谢谢! (3认同)

Cᴏʀ*_*ᴏʀʏ 7

你在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"
/>
Run Code Online (Sandbox Code Playgroud)