Page View Details

|

DISCLAIMER: Before you put this script in place make sure you have some kind of disclaimer on your site to state what kind of data you record from the visitor.

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[pageview] (
	[id] [int] IDENTITY(1, 1) NOT NULL,
	[datetime] [datetime] NOT NULL,
	[ipaddress] [varchar](50) NOT NULL,
	[hostname] [text] NULL,
	[url] [text] NOT NULL,
	[mobile] [varchar](50) NOT NULL,
	[os] [varchar](50) NULL,
	[browser] [varchar](50) NULL,
	[frames] [varchar](50) NOT NULL,
	[tables] [varchar](50) NOT NULL,
	[cookies] [varchar](50) NOT NULL,
	[vbscript] [varchar](50) NOT NULL,
	[javascript] [varchar](50) NOT NULL,
	[javaapplets] [varchar](50) NOT NULL,
	[activex] [varchar](50) NOT NULL,
	[CUID] [varchar](80) NOT NULL,
	CONSTRAINT [PK_pageview] PRIMARY KEY CLUSTERED ([id] ASC) WITH (
		PAD_INDEX = OFF,
		STATISTICS_NORECOMPUTE = OFF,
		IGNORE_DUP_KEY = OFF,
		ALLOW_ROW_LOCKS = ON,
		ALLOW_PAGE_LOCKS = ON
		)
	ON [PRIMARY]
	) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

SET ANSI_PADDING OFF
GO
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Configuration;
using System.Net;
using System.Text.RegularExpressions;

public partial class pageview: System.Web.UI.Page
{
	public string connString = ConfigurationManager.ConnectionStrings["Website.DbConnection"].ToString();
	public string sUsername = "";

private string IpAddress()
	{
		string strIpAddress;
		try
		{
			strIpAddress = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
			if (strIpAddress == null)
				strIpAddress = Request.ServerVariables["REMOTE_ADDR"];
		}
		catch
		{
			strIpAddress = "Unknown";
		}
		return strIpAddress;
	}

public int PageView()
	{
		#region Track Visitors
		string ipAddress = IpAddress();
		try
		{
			hostname = Dns.GetHostByAddress(ipAddress).HostName;
		}
		catch
		{
			hostname = "Unknown";
		}

		#region Detect Browser Type
		System.Web.HttpBrowserCapabilities browser = Request.Browser;
		string s = browser.Browser;

		if (Request.UserAgent.IndexOf("Chrome") > 0)
		{
			s = "Chrome";
		}

		/*Response.Write(
		DateTime.Now.ToString() + "<p>" +
		ipAddress + "<p>" +
		hostname + "<p>" +
		Request.Url.ToString() + "<p>" +
		""
		);*/

		#region Based On Browser Detect If Mobile Device
		HttpBrowserCapabilities bc = Request.Browser;
		string strMobile = "False";
		string u = Request.ServerVariables["HTTP_USER_AGENT"];
		Regex b = new Regex(@"android.+mobile|avantgo|bada/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)/|plucker|pocket|psp|symbian|treo|up.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino", RegexOptions.IgnoreCase | RegexOptions.Multiline);
		Regex v = new Regex(@"1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|/(k|l|u)|50|54|e-|e/|-[a-w])|libw|lynx|m1-w|m3ga|m50/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(-|2|g)|yas-|your|zeto|zte-", RegexOptions.IgnoreCase | RegexOptions.Multiline);
		if ((b.IsMatch(u) || v.IsMatch(u.Substring(0, 4))))
		{
			//Response.Redirect("http://detectmobilebrowser.com/mobile");
			strMobile = "True";
		}
		else
		{
			strMobile = "False";

		}
		#endregion Based On Browser Detect If Mobile Device
		#endregion Detect Browser Type

		#region Detect OS
		String userAgent;
		userAgent = Request.UserAgent;
		string strOSVer = "";

		//Response.Write("<p>" + userAgent+ "<p>");
		if (userAgent.IndexOf("Windows") > -1)
		{
			strOSVer = "Windows";
		}

		if (userAgent.IndexOf("Linux") > -1)
		{
			strOSVer = "Linux";
		}

		if (userAgent.IndexOf("Android") > -1)
		{
			strOSVer = "Android";
		}

		if (userAgent.IndexOf("Apple") > -1 || userAgent.IndexOf("Mac") > -1)
		{
			strOSVer = "Apple";
		}

		if (strOSVer == "")
		{
			strOSVer = "Unknown";
		}
		#endregion Detect OS

		SqlConnection sqlConn = new SqlConnection();
		sqlConn.ConnectionString = connString;
int nPageViewNum = 0;
		try
		{
			string sSQL = "INSERT INTO pageview (datetime,ipaddress,hostname,url,mobile,os,browser,frames,tables,cookies,vbscript,javascript,javaapplets,activex,cuid) VALUES (@datetime,@ipaddress,@hostname,@url,@mobile,@os,@browser,@frames,@tables,@cookies,@vbscript,@javascript,@javaapplets,@activex,@cuid); SELECT CAST(scope_identity() AS int);";
			sqlConn.Open();
			SqlCommand cmd = new SqlCommand(sSQL, sqlConn);
			cmd.Parameters.AddWithValue("@datetime", DateTime.Now.ToString());
			cmd.Parameters.AddWithValue("@ipaddress", ipAddress);
			cmd.Parameters.AddWithValue("@hostname", hostname);
			cmd.Parameters.AddWithValue("@url", Request.Url.ToString());
			cmd.Parameters.AddWithValue("@mobile", strMobile);
			cmd.Parameters.AddWithValue("@os", strOSVer);
			cmd.Parameters.AddWithValue("@browser", s);
			cmd.Parameters.AddWithValue("@frames", bc.Frames);
			cmd.Parameters.AddWithValue("@tables", bc.Tables);
			cmd.Parameters.AddWithValue("@cookies", bc.Cookies);
			cmd.Parameters.AddWithValue("@vbscript", bc.VBScript);
			cmd.Parameters.AddWithValue("@javascript", bc.JavaScript);
			cmd.Parameters.AddWithValue("@javaapplets", bc.JavaApplets);
			cmd.Parameters.AddWithValue("@activex", bc.ActiveXControls);
			cmd.Parameters.AddWithValue("@cuid", sUsername);
			nPageViewNum = (int)cmd.ExecuteScalar();
		}
		catch
		{
		}
		finally
		{
			if (sqlConn != null && sqlConn.State == System.Data.ConnectionState.Open) sqlConn.Close();
		}
		return nPageViewNum;

		#endregion Track Visitors - Stop
	}
protected void Page_Load(object sender, EventArgs e)
	{
		PageView();
	}
Originally Posted on July 9, 2013
Last Updated on October 26, 2015
All information on this site is shared with the intention to help. Before any source code or program is ran on a production (non-development) system it is suggested you test it and fully understand what it is doing not just what it appears it is doing. I accept no responsibility for any damage you may do with this code.