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

33,947

Solution 1

ASP.NET Performance Counters like State Server Sessions Active (The number of active user sessions) should help you out. Then you can just read and display the performance counters from your admin page..

Solution 2

In 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();
}

Note: The Application.Lock and Application.Unlock methods are used to prevent multiple threads from changing this variable at the same time.

In Web.config

Verify that the SessionState is "InProc" for this to work

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

In your .aspx file

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

Note: Code was originally copied from http://www.aspdotnetfaq.com/Faq/How-to-show-number-of-online-users-visitors-for-ASP-NET-website.aspx (link no longer active)

Solution 3

If you are using .net Membership you could use

Membership.GetNumberOfUsersOnline()

More about it: http://msdn.microsoft.com/en-us/library/system.web.security.membership.getnumberofusersonline.aspx

Solution 4

If you'd like to implement the same mechanism by yourself, you can define like a CurrentUserManager class and implement the singleton pattern here. This singleton object of class CurrentUserManager would be unique in the AppDomain. In this class you will create its self instance once, and you will prohibit the others from creating new instances of this class by hiding its constructor. Whenever a request comes to this object, that single instance will give the response. So, if you implement a list that keeps the records of every user (when a user comes in, you add him to the list; when he goes out, you remove him from the list). And lastly, if you want the current user count you could just ask the list count to this singleton object.

Solution 5

if you use sql server as the session state provider you can use this code to count the number of online users:

SELECT Count(*) As Onlines FROM ASPStateTempSessions WHERE Expires>getutcdate()
Share:
33,947
Samuel Meacham
Author by

Samuel Meacham

I'm Samuel Meacham, a database, web and .NET (C#) developer. I was an advanced TSQL developer at Chase Bank for many years, where I honed and hardened my database skills. I left Chase for CB Richard Ellis in 2007, and I work in their commercial Mapping Center, where I work with an amazing development team. We're very lucky to work for a company that always gives us the latest tools, fast hardware, a great environment, and the flexibility to solve problems as we see fit. I've been programming since I was 14, and I still can't get enough of it.

Updated on July 09, 2022

Comments

  • Samuel Meacham
    Samuel Meacham almost 2 years

    Is there a way to determine the number of users that have active sessions in an ASP.NET application? I have an admin/tools page in a particular application, and I would like to display info regarding all open sessions, such as the number of sessions, and perhaps the requesting machines' addresses, or other credential information for each user.