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

Delete Duplicate Rows

Posted on April 29, 2013October 26, 2015

CREATE TABLE DuplicateRcordTable (Col1 INT, Col2 INT) INSERT INTO DuplicateRcordTable SELECT 1, 1 UNION ALL SELECT 1, 1 –duplicate UNION ALL SELECT 1, 1 –duplicate UNION ALL SELECT 1, 2 UNION ALL SELECT 1, 2 –duplicate UNION ALL SELECT 1, 3 UNION ALL SELECT 1, 4 GO SELECT * FROM…

Read More

AWS CLI – List All VM Instances

Posted on April 6, 2018

for region in `aws ec2 describe-regions –output text | cut -f3` do echo -e "\nListing Instances in region:’$region’…" aws ec2 describe-instances –region $region done Reference: https://github.com/aws/aws-cli/issues/1777 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)…

Read More

Code

Top Posts & Pages

  • PowerShell - Rename Pictures to Image Taken
  • PowerShell - Get Text Encoding Type
  • Front Page
  • Open On Screen Keyboard (OSK)
  • SQLite - Auto-Increment / Auto Generate GUID

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
  • PowerShell - Get Text Encoding Type
  • Open On Screen Keyboard (OSK)
  • SQLite - Auto-Increment / Auto Generate GUID
  • Mac OS X Terminal - Parallels - Reset Windows User Password
  • PowerShell - Change Windows CD/DVD Drive Letter
©2025 David Kittell | WordPress Theme by SuperbThemes