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