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(); }
Last Updated on October 26, 2015