【问题标题】:ASP.NET Timeout IssuesASP.NET 超时问题
【发布时间】:2012-02-01 19:05:26
【问题描述】:

我正在使用在 web.config 中具有以下超时值的旧系统。

<sessionState timeout="120" />
...
<forms name="login" timeout="240" />

我还实施了以下措施来防止空会话变量问题。这是通用版本:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    If Not IsPostBack Then
        Session("DocNum") = ""
    Else
        If Session("DocNum") Is Nothing Then
            Response.Redirect("~/index.aspx?e=SessionExpired")
        End If
    End If

End Sub

似乎会话变量在 120 分钟设置下被清除,即使系统上有许多用户。这似乎经常发生。

我已经读到应用程序池可能会导致这种情况,但这是怎么回事?还有哪些其他配置和超时值可能会导致此问题?

感谢您的帮助。

【问题讨论】:

  • 您的会话状态是否设置为 InProc?如果是这样,应用程序池重置会导致此问题。

标签: asp.net vb.net session session-timeout


【解决方案1】:

如果您的会话状态设置为 InProc,则应用程序池的回收设置可能会重置清除会话​​的应用程序池。 “InProc”意味着会话存储在内存中,因此,任何应用程序池重置都会丢失会话中存储的内容。您可以查看 Web 服务器的系统事件日志,以查看是否有任何由于定期、回收计划或错误导致的应用程序池回收事件。

【讨论】:

  • 默认应用程序池空闲超时为 20 分钟。如果您希望会话持续时间更长,则必须增加此值。 iis.net/ConfigReference/system.applicationHost/applicationPools
  • @pseudocoder,即使正在使用应用程序,空闲超时也会杀死会话?
  • 如果你使用“InProc”,是的。
  • 否,但如果应用程序池空闲超时未设置为等于或大于其值,则会话空闲超时的行为是不可预测的。如本答案所述,回收设置可能与您的问题有更直接的关系。检查您的事件日志以获取应用程序池消息。
猜你喜欢
  • 1970-01-01
  • 2015-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-30
  • 2011-06-21
相关资源
最近更新 更多