2013-01-06 45 views
0

我想在我的ASP网站中插入访问计数器,所以我使用了global.asax文件来实现该功能。问题是会话结束时,“AllVisitorCount”在我的web.Config中获得默认值,该值被设置为0。应用程序变量在会话结束后得到重置

的代码是:

void Session_Start(object sender, EventArgs e) { 
    // Code that runs when a new session is started 
    int allVisitorCount = 0; 
    if (Application["AllVisitorCount"] != null) 
    allVisitorCount = (int)(Application["AllVisitorCount"]); 
    else 
    Application.Add("AllVisitorCount", 0); 
    allVisitorCount++; 
    Application["AllVisitorCount"] = allVisitorCount; 
} 
+0

这是可取的,因为你存储在'Application'中的东西是会话本地的。如果您希望变量的寿命长于会话,请在会话结束前将它们保存到光盘/数据库中,并在会话开始时加载它们。 –

回答

1

要确保你有slidingExpiration设置为False在你的web.config

0

这有可能是你的应用程序池超时与会话,从而清除所有应用程序变量。

请提供更多详细信息,如:是否托管在IIS,IIS Express,Cassini;会话如何结束(以编程方式,超时等);你有没有在Application_End上放置一个断点来查看事件是否被触发。

+0

它托管IIS 7.0 – Discover

+0

非常感谢,我用Xml作为解决方案来实现计数器功能。我发现它对我的情况非常有用。 – Discover

1

“应用程序”不是一个永久的对象。它在应用程序启动后(例如第一个会话开始)创建并在应用程序池超时后处理。你可以持久化你的变量,或者简单的改变你的AppPool中的“空闲超时”参数(IIS => Application Pools =>你的AppPool(或DefaultAppPool,如果你还没有定义的话)=>高级设置=>空闲超时)。