2013-01-06 40 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,如果你還沒有定義的話)=>高級設置=>空閒超時)。