För att testa detta exempel så skapar du ett nytt webprojekt. Om det inte redan finns en Default.aspx så skapar du den.
Det första vi skall gör är att lägga till följande i web.config
Där efter skall vi skapa en klass fil som innehåller en del viktiga fuktioner. Skapa en ny klass fil och döp den till WebsiteVisitor.cs.
Sedan öppnar du den och fyller i följande kod.
namespace Roboblob.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;
}
}
}
}
Nu skall vi skapa en Global collection där vi kommer att lagra våra aktiva WebsiteVisitor objekt:
public static class OnlineVisitorsContainer
{
public static Dictionary
}
För att göra den tillgänglig på alla sidorna så lägger vi in public static class i överst på WebsiteVisitors.cs klassen.
klassen skall då se ut så här:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Collections.Generic;
namespace Roboblob.Utility
{
public class OnlineVisitorsUtility
{
public static Dictionary
}
///
/// Summary description for WebsiteVisitor
///
public class WebsiteVisitor
{
private string sessionId;
public string SessionId
{
get { return sessionId; }
set { sessionId = value; }
}
///
/// UserIp Property
///
public string IpAddress
{
get { return ipAddress; }
set { ipAddress = value; }
}
private string ipAddress;
///
/// UrlReferrer Property
///
public string UrlReferrer
{
get { return urlReferrer; }
set { urlReferrer = value; }
}
private string urlReferrer;
///
/// EnterUrl Property
///
public string EnterUrl
{
get { return enterUrl; }
set { enterUrl = value; }
}
private string enterUrl;
///
/// HostName Property
///
public string HostName
{
get { return hostName; }
set { hostName = value; }
}
private string hostName;
///
/// UserAgent Property
///
public string UserAgent
{
get { return userAgent; }
set { userAgent = value; }
}
private string userAgent;
///
/// SessionStarted Property
///
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;
}
}
}
}
Då skall vi jobba lite i Global.asax . Om du inte har en sådan så skapar du den. Du hittar den om du högerklickar i solution explorer och väljer "add new item"
Lägg till följande i global asax:
<%@ Import Namespace="System.Collections.Generic" %>
<%@ Import Namespace="Roboblob.Utility" %>
//Här är koden när sessionen startar, dvs när användar anländer till sidan.
void Session_Start(object sender, EventArgs e)
{
// add some data to the Session so permanent SessionId is assigned
// otherwise new SessionId is assigned to the user until some data
// is actually written to Session
Session["Start"] = DateTime.Now;
// get current context
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);
}
}
}
//Nu till Session_End event handler code:
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.
if (this.Session != null)
OnlineVisitorsContainer.Visitors.Remove(this.Session.SessionID);
}
Då är den mesta koden gjord. Då är det dags att öppna Default.aspx.
Lägg till en Gridview på sidan. Byt sedan till "Source" -läge för att se HTML koden. Uppdatera gridviewn enl nedan.
<%# ((DateTime)Eval("SessionStarted")).ToString("dd/MM/yyyy HH:mm:ss") %>
<%# Eval("IpAddress") %>
<%# Eval("UserAgent") %>
<%# Eval("EnterUrl") %>
Och nu måste vi binda vår Globala Collection från OnlineVisitorsContainer class till the GridVIew control:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
if (OnlineVisitorsContainer.Visitors != null)
{
gvVisitors.DataSource = OnlineVisitorsContainer.Visitors.Values;
gvVisitors.DataBind();
}
}
}
Starta projekt och titta själv