簡體   English   中英

ASP.NET:這個在線用戶計數器出了什么問題?

[英]ASP.NET: what's wrong with this online users counter?

我正在嘗試計算在線用戶的數量。

這是代碼:

protected void Application_Start()
{
    ...
    Application["OnlineUsers"] = 0;
}

private void Session_Start(object sender, EventArgs e)
{
            Application.Lock();
            Session["O"] = "OO"; // Need to have something in the session
            Application["OnlineUsers"] = (int)Application["OnlineUsers"] + 1;
            Application.UnLock();
}


private void Session_End(object sender, EventArgs e)
{
            Application.Lock();
            Application["OnlineUsers"] = (int)Application["OnlineUsers"] - 1;
            Application.UnLock();
}

There are <b>@Context.ApplicationInstance.Application["OnlineUsers"].ToString()</b> users online

它有點工作,但我的值總是大於在線用戶的實際數量。

更糟糕的是:在Opera中刷新頁面N次會增加N的在線用戶數量!

這里需要注意的是, ASP.NET正在努力為用戶存儲sessions 如果ASP.NET沒有理由記住你是誰,那就不會

當我們第一次請求頁面時,將創建會話對象並將其會話標識符發送到Web瀏覽器,以便瀏覽器可以在cookie中存儲會話標識符(用於請求的標識)。 如果再次提交/回發該頁面,那么來自cooike的相同會話標識符將可用於app-server,並且它假定這是舊請求。 但在您的情況下(您正在引用頁面),這意味着Web瀏覽器會發出新請求(當然請求類型將是GET)而不發送cookie。 因此,最好在第一次請求時將用戶重定向到特定頁面。

即使客戶端(瀏覽器)關閉(或結束會話),Session會在超時(默認值為20分鍾)時調用Session_End事件句柄。

我知道它不是你要問的但你可以在IIS上查詢PerformanceCounter以獲取此信息

(剃刀示例)

@using System.Diagnostics
@{
  var perf = new PerformanceCounter("ASP.NET", "State Server Sessions Active"); 
}
<h2>About</h2>
<p>
   @perf.NextValue()
</p>

我沒有檢查,但您對此的訪問權限可能需要您的應用程序池中的Windows /服務帳戶。

您還可以增加和減少自己的性能計數器,並通過用於監視網站等的工具將它們提供給系統管理員。

SqlMembershipProvider具有計數登錄用戶的工具,這意味着如果您使用它來管理表單身份驗證,您可能已經擁有數據。

你也可以考慮讓你的頁面每隔一段時間發出一個ajax脈沖並計算一下。 或者有一些applet,silverlight,flash等做同樣的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM