使用Global.asax全域變數可以避免重新整理頁面導致計數器重新整理。
void Application_Start(object sender, EventArgs e)
{
//在應用程式啟動時啟動並執行代碼,IIS重新啟動時重新整理計數器。
Application["count"] = 0;
}
void Session_Start(object sender, EventArgs e)
{
//在新會話啟動時啟動並執行代碼,會話建立,計數器+1,防止錯誤先鎖定後解鎖。重複重新整理頁面不會更改計數器,只有建立新會話才可以。
Application.Lock();
Application["count"] = (int)Application["count"] + 1;
Application.UnLock();
}
void Session_End(object sender, EventArgs e)
{
//在會話結束時啟動並執行代碼。此處主要是用來統計線上人數,如只需要計數,可以不需要此處代碼。
// 注意: 只有在 Web.config 檔案中的 sessionstate 模式設定為
// InProc 時,才會引發 Session_End 事件。如果會話模式
//設定為 StateServer 或 SQLServer,則不會引發該事件。
Application.Lock();
Application["count"] = (int)Application["count"] - 1;
Application.UnLock();
}
protected void Page_Load(object sender, EventArgs e)
{
//頁面中直接使用Application["count"]。
Response.Write("你是本網站第"+Application["count"]+"個訪問者");
}
注意:Application與Session的區別。前者為應用程式的變數,後者為會話的變數。則前者保持時間長,不得亂用。