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

时间:2011-12-06 17:12:02

标签: c# asp.net session-state

我不确定为什么但只是在一定时间之后,我的Web应用程序全局变量也会失去价值以及会话变量。我在Web配置文件<sessionState timeout="60" />中设置了。这是在我的本地主机上我还没有把它放在网络服务器上,这可能是原因吗?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

如果它在IIS中运行,您是否将Regular Time Interval (minutes)Idle Time-out (minutes)设置为较低值?可以在应用程序池的Advanced Settings...下找到这些设置。

答案 2 :(得分:0)

这可能无法解决您的问题,但您可以将以下内容添加到页面的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. ");
            }
        }
    }
}