簡體   English   中英

如何確定ASP.NET站點(IIS)上的用戶數? 他們的信息?

[英]How can I determine the number of users on an ASP.NET site (IIS)? And their info?

有沒有辦法確定ASP.NET應用程序中具有活動會話的用戶數? 我在特定應用程序中有一個管理員/工具頁面,我想顯示有關所有打開會話的信息,例如會話數,可能還有請求計算機的地址,或每個用戶的其他憑據信息。

在global.aspx中

void Application_Start(object sender, EventArgs e)
{
    // Code that runs on application startup
    Application["OnlineUsers"] = 0;
}

void Session_Start(object sender, EventArgs e)
{
    // Code that runs when a new session is started
    Application.Lock();
    Application["OnlineUsers"] = (int)Application["OnlineUsers"] + 1;
    Application.UnLock();
}

void Session_End(object sender, EventArgs e)
{
    // Code that runs when a session ends. 
    // Note: The Session_End event is raised only when the sessionstate 
    // mode is set to InProc in the Web.config file. 
    // If session mode is set to StateServer or SQLServer, 
    // the event is not raised.
    Application.Lock();
    Application["OnlineUsers"] = (int)Application["OnlineUsers"] - 1;
    Application.UnLock();
}

注意: Application.Lock和Application.Unlock方法用於防止多個線程同時更改此變量。

在Web.config中

驗證SessionState是否為“InProc”以使其正常工作

    <system.web>
        <sessionState mode="InProc" cookieless="false" timeout="20" />
    </system.web>

在.aspx文件中

Visitors online: <%= Application["OnlineUsers"].ToString() %>

注意:代碼最初是從 http://www.aspdotnetfaq.com/Faq/How-to-show-number-of-online-users-visitors-for-ASP-NET-website.aspx 復制的(鏈接不再有效)

ASP.NET狀態服務器會話活動(活動用戶會話數)等ASP.NET性能計數器可以幫助您。 然后,您只需從管理頁面中閱讀並顯示性能計數器即可

如果您使用.net會員資格,您可以使用

Membership.GetNumberOfUsersOnline()

更多關於它: http//msdn.microsoft.com/en-us/library/system.web.security.membership.getnumberofusersonline.aspx

如果您想自己實現相同的機制,可以像CurrentUserManager類一樣定義並在此處實現單例模式。 類CurrentUserManager的這個單例對象在AppDomain中是唯一的。 在這個類中,您將創建一次自我實例,並且您將通過隱藏其構造函數來禁止其他人創建此類的新實例。 每當請求到達此對象時,該單個實例將給出響應。 因此,如果您實現一個列表來保存每個用戶的記錄(當用戶進入時,您將他添加到列表中;當他出去時,您將他從列表中刪除)。 最后,如果你想要當前用戶數,你可以只詢問列表計數到這個單例對象。

我在過去看到這種方式的方法是在Global.asax文件中向Session_OnStart事件添加額外的代碼,以便以會話無關的方式存儲信息,例如數據庫或HttpApplicationState對象。 根據您的需要,您還可以使用Session_OnEnd刪除此信息。

您可能希望使用Application_Start和Application_End事件初始化並清除部分信息。

然后,管理頁面可以讀取此信息並顯示統計信息等。

這將在http://msdn.microsoft.com/en-us/library/ms178594.aspxhttp://msdn.microsoft.com/en-us/library/ms178581.aspx中進行更深入的解釋。

如果您使用sql server作為會話狀態提供程序,則可以使用此代碼計算在線用戶的數量:

SELECT Count(*) As Onlines FROM ASPStateTempSessions WHERE Expires>getutcdate()

您可以使用PerformanceCounter從System.Diagnostics命名空間獲取數據。 它允許您獲得“會話活動”等等。 它允許您從本地服務器和遠程服務器獲取。

以下是如何在本地計算機上執行此操作的示例

void Main()
{
    var pc = new PerformanceCounter("ASP.NET Applications", "Sessions Active", "__Total__");

    Console.WriteLine(pc.NextValue());
}

或者對於遠程服務器,你會做:

void Main()
{
    var pc = new PerformanceCounter("ASP.NET Applications", "Sessions Active", "__Total__", "ServerHostName.domain");

    Console.WriteLine(pc.NextValue());
}

ASP.NET的Performance Counters提供了可以監視的ASP.NET計數器的完整列表

Google Analytics附帶了一個可以在ASP.NET MVC應用程序上實現的API。 它具有RealTime功能,因此可以跟蹤您網站上的當前用戶數量並將其返回到您的應用程序。

這是一些信息

暫無
暫無

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

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