Wednesday, April 15, 2009

findout howmany users are currently online

Step 1 - > Create a class
namespace Utility
{
public class WebsiteVisitor
{
private string sessionId;
public string SessionId
{
get { return sessionId; }
set { sessionId = value; }
}
public string IpAddress
{
get { return ipAddress; }
set { ipAddress = value; }
}
private string ipAddress;
public string UrlReferrer
{
get { return urlReferrer; }
set { urlReferrer = value; }
}
private string urlReferrer;
public string EnterUrl
{
get { return enterUrl; }
set { enterUrl = value; }
}
private string enterUrl;
public string UserAgent
{
get { return userAgent; }
set { userAgent = value; }
}
private string userAgent;
public DateTime SessionStarted
{
get { return sessionStarted; }
set { sessionStarted = value; }
}
private DateTime sessionStarted;
public WebsiteVisitor(HttpContext context)
{
if ((context != null) && (context.Request != null) && (context.Session != null))
{
this.sessionId = context.Session.SessionID;
sessionStarted = DateTime.Now;
userAgent = string.IsNullOrEmpty(context.Request.UserAgent) ? "" : context.Request.UserAgent;
ipAddress = context.Request.UserHostAddress;
if (context.Request.UrlReferrer != null)
{
urlReferrer = string.IsNullOrEmpty(context.Request.UrlReferrer.OriginalString) ? "" : context.Request.UrlReferrer.OriginalString;
}
enterUrl = string.IsNullOrEmpty(context.Request.Url.OriginalString) ? "" : context.Request.Url.OriginalString;
}
}
}
public static class OnlineVisitorsContainer
{
public static Dictionary[string, WebsiteVisitor] Visitors = new Dictionary[string, WebsiteVisitor]();
}
}
Step 2- >
Add Global.aspx file in porject and use following name spaces
[%@ Import Namespace="System.Collections.Generic" %]
[%@ Import Namespace="Utility" %]
Use session start and session end event for global.aspx page
void Session_Start(object sender, EventArgs e)
{
Session["Start"] = DateTime.Now;
HttpContext currentContext = HttpContext.Current;
if (currentContext != null)
{
if (!OnlineVisitorsContainer.Visitors.ContainsKey(currentContext.Session.SessionID))
{
WebsiteVisitor currentVisitor = new WebsiteVisitor(currentContext);
OnlineVisitorsContainer.Visitors.Add(currentVisitor.SessionId, currentVisitor);
}
}
}
void Session_End(object sender, EventArgs e)
{
if (this.Session != null)
{
OnlineVisitorsContainer.Visitors.Remove(this.Session.SessionID);
}
}
Step 3 ->
One Third step we are able to show user informarmations
[asp:GridView ID="gvVisitors" runat="server" AutoGenerateColumns="False"
CellPadding="2" ForeColor="#333333" GridLines="Both" ]
[FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /]
[RowStyle BackColor="#EFF3FB" /]
[Columns]
[asp:TemplateField HeaderText="Session Started"]
[ItemTemplate]
[%# ((DateTime)Eval("SessionStarted")).ToString("dd/MM/yyyy HH:mm:ss") %][br /]
[/ItemTemplate]
[/asp:TemplateField]
[asp:TemplateField HeaderText="Ip"]
[ItemTemplate]
[%# Eval("IpAddress") %]
[/ItemTemplate]
[/asp:TemplateField]
[asp:TemplateField HeaderText="Other"]
[ItemTemplate]
[span style="font-size:small;"]
[%# Eval("UserAgent") %][br /]
[%# Eval("EnterUrl") %][br /]
[/span]
[asp:HyperLink ID="refurl" Text='[%# Eval("UrlReferrer") %]' Font-Size="Small"
NavigateUrl='[%# Eval("UrlReferrer") %]' runat="server" Target="_blank" /]
[/ItemTemplate]
[/asp:TemplateField]
[/Columns]
[PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" /]
[SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" /]
[HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /]
[EditRowStyle BackColor="#2461BF" /]
[AlternatingRowStyle BackColor="White" /]
[/asp:GridView]
Add name space on page
using Utility
if (!Page.IsPostBack)
{
if (OnlineVisitorsContainer.Visitors != null)
{
gvVisitors.DataSource = OnlineVisitorsContainer.Visitors.Values;
gvVisitors.DataBind();
}
}
Thanks
HelponDesk Team

No comments: