C# asp.net全局变量和会话变量在5-15分钟后失去值

C# asp.net全局变量和会话变量在5-15分钟后失去值,c#,asp.net,session-state,C#,Asp.net,Session State,我不知道为什么,但只是在一段时间后,我的web应用程序全局变量以及会话变量才会失去价值。我在web配置文件中进行了设置。这是在我的本地主机上,我还没有将其放到web服务器上,这可能是原因吗?如果它在IIS中运行,您是否将常规时间间隔(分钟)或空闲超时(分钟)设置为较低的值?这些设置可以在应用程序池的高级设置…下找到。对于inproc会话状态,如果应用程序池回收或关闭,您的会话信息将消失。检查iis设置以了解何时发生应用程序池回收。我认为默认情况下,在20分钟不活动后关闭应用程序池。这种情况可能发

我不知道为什么,但只是在一段时间后,我的web应用程序全局变量以及会话变量才会失去价值。我在web配置文件
中进行了设置。这是在我的本地主机上,我还没有将其放到web服务器上,这可能是原因吗?

如果它在IIS中运行,您是否将
常规时间间隔(分钟)
空闲超时(分钟)
设置为较低的值?这些设置可以在应用程序池的
高级设置…
下找到。

对于inproc会话状态,如果应用程序池回收或关闭,您的会话信息将消失。检查iis设置以了解何时发生应用程序池回收。我认为默认情况下,在20分钟不活动后关闭应用程序池。这种情况可能发生的原因还有很多。如果您需要会话超出应用程序池的生命周期,则应将其从proc中取出,并在状态服务器、数据库或其他自定义设备中运行。

这可能无法解决您的问题,但您可以将以下内容添加到页面的OnInit中,以确定会话是否实际超时:

override protected void OnInit(EventArgs e)
{
    // Initialize the base Page class.
    base.OnInit(e);
    //If the session exists
    if (Context.Session != null)
    {
        // IsNewSession indicates the session has been reset or the user's session has timed out.
        if (Session.IsNewSession)
        {
            // new session, check for a cookie. 
            string cookie = Request.Headers["Cookie"];
            // If there is a cookie does it contain ASP.NET Session ID? 
            if ((null != cookie) &&
                (cookie.IndexOf("ASP.NET_SessionId") >= 0))
            {
                // Since it's a new session but an ASP.NET cookie exists, the session has expired. Notify the user.  
                throw new Exception("Your session has timed out. ");
            }
        }
    }
}

web配置中会话状态的超时是多少?在过了这么长时间的不活动之后,它将失去上下文。不要使用全局变量。多个请求可以同时触碰它们,这意味着多个不同的用户可以同时触碰它们。我有一台windows 7计算机,我去哪里检查IIS?打开IIS管理器(最简单的方法是点击windows键,然后开始键入IIS-它将出现在列表中)。在左边机器名下的树视图中,您将看到应用程序池的节点。单击将在右侧的列表视图中显示应用程序池。单击应用程序池,然后单击高级设置。。。右边的链接。您将看到一些内容,如私有内存Lmiit(KB)、空闲超时(分钟)、请求限制、常规时间间隔(分钟)。这些东西控制应用程序池的回收。我想这不适用于使用localhost的情况,我在我的管理工具中没有看到iis。