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
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.