Skip to content
David Kittell
David Kittell

Application & System: Development / Integration / Orchestration

  • Services
    • Application Development
    • Online Application Integration
  • Code
  • Online Tools
  • Tech Support
David Kittell

Application & System: Development / Integration / Orchestration

Page View Details

Posted on July 9, 2013October 26, 2015 By David Kittell

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.

Related

Code CSharp

Post navigation

Previous post
Next post

Related Posts

Mac OSX Terminal – Get Stored Wireless (Wi-Fi) Password

Posted on January 18, 2017June 6, 2025

Addition to Find & Scan Wireless Networks the additional line will require a password but then display the stored password for the defined router name. # List all Wi-Fi – Older macOS /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -s # Newer macOS networksetup -listpreferredwirelessnetworks en0 # Get Stored Password To Wi-Fi security find-generic-password -ga "Router_Name"…

Read More

Exporting the Schema from the Source Forest

Posted on July 25, 2013October 26, 2015

The LDIFDE command-line tool, which ships with Windows Server 2003 and Windows Server 2008, can be used to export the schema from the source forest. This tool creates a file that is formatted with the LDAP Data Interchange Format (LDIF). No special permissions are required to export the schema from…

Read More

Regex Match

Posted on August 6, 2013October 26, 2015

IF OBJECT_ID(N’dbo.RegexMatch’) IS NOT NULL DROP FUNCTION dbo.RegexMatch GO CREATE FUNCTION dbo.RegexMatch ( @pattern VARCHAR(2000) ,@matchstring VARCHAR(MAX) –Varchar(8000) got SQL Server 2000 ) RETURNS INT /* The RegexMatch returns True or False, indicating if the regular expression matches (part of) the string. (It returns null if there is an error)….

Read More

Code

Top Posts & Pages

  • PowerShell - Rename Pictures to Image Taken
  • Open On Screen Keyboard (OSK)
  • SQLite - Auto-Increment / Auto Generate GUID
  • Mac OS X Terminal - Parallels - Reset Windows User Password
  • PowerShell - IPv4 Range

Recent Posts

  • Javascript – Digital Clock with Style
  • BASH – Web Ping Log
  • BASH – Picture / Video File Name Manipulation
  • Mac OSX Terminal – Create SSH Key
  • Bash – Rename Picture

Top Posts

  • PowerShell - Rename Pictures to Image Taken
  • Open On Screen Keyboard (OSK)
  • SQLite - Auto-Increment / Auto Generate GUID
  • Mac OS X Terminal - Parallels - Reset Windows User Password
  • PowerShell - IPv4 Range
©2025 David Kittell | WordPress Theme by SuperbThemes