Below is a rather long set of code that will enable you to collect user Stats, and save this information to a database.

The Database:

This is a script generation for a MYSQL database table, however can be adapted for others.
CREATE TABLE IF NOT EXISTS 'site_statistics` (
  `visitorid` int(20) NOT NULL AUTO_INCREMENT,
  `timedata` varchar(100) DEFAULT NULL,
  `datedata` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `referer` longtext,
  `StartPage` longtext,
  `Browser` varchar(250) DEFAULT NULL,
  `Browser_Version` varchar(100) DEFAULT NULL,
  `Screen_Width` varchar(100) DEFAULT NULL,
  `Screen_Height` varchar(100) DEFAULT NULL,
  `Screen_Available_Width` varchar(100) DEFAULT NULL,
  `Screen_Available_Height` varchar(100) DEFAULT NULL,
  `ColorDepth` varchar(100) DEFAULT NULL,
  `User_OS` varchar(100) DEFAULT NULL,
  `User_OS_Version` varchar(100) DEFAULT NULL,
  `VisitorIP` varchar(100) DEFAULT NULL,
  `pageviews` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`visitorid`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

This database table stores all the User's Statistics.

Stats.cfm:

Best use of this script is to include it at the top of your CFM pages, before any of the header contents get called:

<html>
<cfinclude template="stats.cfm">
...
The Stats.cfm Code:
I've commented it out well, so hopefully detailed explanations of the script will be answered through the comments.


<!---\\This File Loads All Site Statistical Data//--->

<!---\\We're Going to start Building The Session Tracking//--->
<!---\\Get todays date//--->
<cfset webos_stats.TodaysDate = Now()>
<!---<cfset TodaysDate = #dateformat(TodaysDate, "yyyy-mm-dd")#>--->
<cfset CurrentTime = Now()>
<cfset webos_stats.CurrentTime = #timeformat(CurrentTime, "HH:mm:ss")#>

<!---\\Get the visitor IP//---->
<cfset webos_stats.VisitorIP = '#REMOTE_ADDR#'>
<!---\\If it's blocked then check the remoth Host and see if there is an IP address//--->
<cfif webos_stats.VisitorIP IS '>
        <cfset webos_stats.VisitorIP = '#REMOTE_HOST#'>
</cfif>

<!---\\Get the page requested:  This is the page/url they entered the site at//--->
        <cfset webos_stats.StartPage = '#CGI.PATH_INFO#?#CGI.QUERY_STRING#'>
        <!---\\Get the referring page info//--->
        <cfset webos_stats.Referer = '#CGI.HTTP_REFERER#'>


<!---\\We're going to Get User's Screen Resolution//--->
<CFIF (isDefined("cookie.VARIABLESPRESENT")) and (#cookie.VARIABLESPRESENT# Eq "True")>

    <!--- Set the Browser Variables into Local CF Variables --->
    <CFSET webos_stats.ScreenResHeight = cookie.ScreenResHeight>
    <CFSET webos_stats.ScreenResWidth = cookie.ScreenResWidth>
    <CFSET webos_stats.ScreenResColorDepth = cookie.ScreenResColorDepth>
    <CFSET webos_stats.ScreenResAvailableHeight = cookie.ScreenResAvailableHeight>
    <CFSET webos_stats.ScreenResAvailableWidth = cookie.ScreenResAvailableWidth>

    <CFCOOKIE NAME="VARIABLESPRESENT" VALUE="False" EXPIRES="12/31/1970">
   

   
<CFELSE>

    <!--- Insert the JavaScript into the HTML Head --->
    <CFHTMLHEAD TEXT="
    <script language=""JavaScript"">
    //-- First we need some basic information about the client's browser.
    var browserName = navigator.appName
    var browserVersion = navigator.appVersion
    var browserVersionNum = parseFloat(browserVersion)
    var agt=navigator.userAgent
   
    //-- Assign initial values for browser settings to global variables.
    var availheight=""unknown""
    var availwidth=""unknown""
    var colordepth=""unknown""
    var height=""unknown""
    var width=""unknown""
   
    //-- If browser is version 4 or better we can take a deeper look.
    if (browserVersionNum >= 4) {
      var availheight=screen.availHeight
      var availwidth=screen.availWidth
      var colordepth=screen.colorDepth + ""+bit""
      var height=screen.height
      var width=screen.width
    }
   
    function SetCookie (name, value) {
        var argv = SetCookie.arguments;
        var argc = SetCookie.arguments.length;
        var expires = (argc > 2) ? argv[2] : null;
        var path = (argc > 3) ? argv[3] : null;
        var domain = (argc > 4) ? argv[4] : null;
        var secure = (argc > 5) ? argv[5] : false;
        document.cookie = name + ""="" + escape (value) +
                ((expires == null) ? """" : (""; expires="" +
            expires.toGMTString())) +
                ((path == null) ? """" : (""; path="" + path)) +
                ((domain == null) ? """" : (""; domain="" + domain)) +
                ((secure == true) ? ""; secure"" : """");
}
    </script>
    ">
   
   
   
   
           
    <!--- Use the Client JavaScript variables and redirect to the same page --->
    <cfif not isdefined('cgi.query string') or isdefined('cgi.query_string') and cgi.querY_string eq "">
    <script language="JavaScript">
                window.location = "<CFOUTPUT>#cgi.Script_Name#</CFOUTPUT>";
                SetCookie("ScreenResHeight", height);
                SetCookie("ScreenResWidth", width);
                SetCookie("ScreenResColorDepth", colordepth)
                SetCookie("ScreenResAvailableHeight", availheight)
                SetCookie("ScreenResAvailableWidth", availwidth)
                SetCookie("VARIABLESPRESENT","True")
    </script>
    <cfelseif isdefined('cgi.QUERY_STRING') and cgi.QUERY_STRING neq "">
    <script language="JavaScript">
                window.location = "<CFOUTPUT>#cgi.Script_Name#?#cgi.QUERY_STRING#</CFOUTPUT>";
                SetCookie("ScreenResHeight", height);
                SetCookie("ScreenResWidth", width);
                SetCookie("ScreenResColorDepth", colordepth)
                SetCookie("ScreenResAvailableHeight", availheight)
                SetCookie("ScreenResAvailableWidth", availwidth)
                SetCookie("VARIABLESPRESENT","True")
    </script>
    </CFIF>
   
    <!--- Since the redirect happens Client side the rest of the web page needs to be aborted --->
    <CFABORT>
   
</CFIF>

<!---\\ Now We'll Get User's Browser //--->
<cfscript>
function browserDetect() {

// Default User Agent to the CGI browser string
var UserAgent=CGI.HTTP_USER_AGENT;

// Regex to parse out version numbers
var VerNo="/?v?_? ?v?[\(?]?([A-Z0-9]*\.){0,9}[A-Z0-9\-.]*(?=[^A-Z0-9])";

// List of browser names
var BrowserList="";

// Identified browser info
var BrowserName="";
var BrowserVer="";

// Working variables
var Browser="";
var tmp="";
var tmp2="";
var x=0;


// If a value was passed to the function, use it as the User Agent
if (ArrayLen(Arguments) EQ 1) UserAgent=Arguments[1];

// Allow regex to match on EOL and instring
UserAgent=UserAgent & " ";

// Browser List (Allows regex - see BlackBerry for example)
BrowserList="1X|Amaya|Ubuntu APT-HTTP|AmigaVoyager|Android|Arachne|Amiga-AWeb|Arora|Bison|Bluefish|Browsex|Camino|Check&Get|Chimera|Chrome|Contiki|cURL|Democracy|" &
            "Dillo|DocZilla|edbrowse|ELinks|Emacs-W3|Epiphany|Galeon|Minefield|Firebird|Phoenix|Flock|IceApe|IceWeasel|IceCat|Gnuzilla|" &
            "Google|Google-Sitemaps|HTTPClient|HP Web PrintSmart|IBrowse|iCab|ICE Browser|Kazehakase|KKman|K-Meleon|Konqueror|Links|Lobo|Lynx|Mosaic|SeaMonkey|" &
            "muCommander|NetPositive|Navigator|NetSurf|OmniWeb|Acorn Browse|Oregano|Prism|retawq|Shiira Safari|Shiretoko|Sleipnir|Songbird|Strata|Sylera|" &
            "ThunderBrowse|W3CLineMode|WebCapture|WebTV|w3m|Wget|Xenu_Link_Sleuth|Oregano|xChaos_Arachne|WDG_Validator|W3C_Validator|" &
            "Jigsaw|PLAYSTATION 3|PlayStation Portable|IPD|" &
            "AvantGo|DoCoMo|UP.Browser|Vodafone|J-PHONE|PDXGW|ASTEL|EudoraWeb|Minimo|PLink|NetFront|Xiino|";
            // Mobile strings
            BrowserList=BrowserList & "iPhone|Vodafone|J-PHONE|DDIPocket|EudoraWeb|Minimo|PLink|Plucker|NetFront|PIE|Xiino|" &
            "Opera Mini|IEMobile|portalmmm|OpVer|MobileExplorer|Blazer|MobileExplorer|Opera Mobi|BlackBerry\d*[A-Za-z]?|" &
            "PPC|PalmOS|Smartphone|Netscape|Opera|Safari|Firefox|MSIE|HP iPAQ|LGE|MOT-[A-Z0-9\-]*|Nokia|";

            // No browser version given
            BrowserList=BrowserList & "AlphaServer|Charon|Fetch|Hv3|IIgs|Mothra|Netmath|OffByOne|pango-text|Avant Browser|midori|Smart Bro|Swiftfox";

            // Identify browser and version
Browser=REMatchNoCase("(#BrowserList#)/?#VerNo#",UserAgent);

if (ArrayLen(Browser) GT 0) {

    if (ArrayLen(Browser) GT 1) {

        // If multiple browsers detected, delete the common "spoofed" browsers
        if (Browser[1] EQ "MSIE 6.0" AND Browser[2] EQ "MSIE 7.0") ArrayDeleteAt(Browser,1);
        if (Browser[1] EQ "MSIE 7.0" AND Browser[2] EQ "MSIE 6.0") ArrayDeleteAt(Browser,2);
        tmp2=Browser[ArrayLen(Browser)];

        for (x=ArrayLen(Browser); x GTE 1; x=x-1) {
            tmp=Rematchnocase("[A-Za-z0-9.]*",Browser[x]);
            if (ListFindNoCase("Navigator,Netscape,Opera,Safari,Firefox,MSIE,PalmOS,PPC",tmp[1]) GT 0) ArrayDeleteAt(Browser,x);
        }

        if (ArrayLen(Browser) EQ 0) Browser[1]=tmp2;
    }

    // Seperate out browser name and version number
    tmp=Rematchnocase("[A-Za-z0-9. _\-&]*",Browser[1]);

    Browser=tmp[1];

    if (ArrayLen(tmp) EQ 2) BrowserVer=tmp[2];

    // Handle "Version" in browser string
    tmp=REMatchNoCase("Version/?#VerNo#",UserAgent);

    if (ArrayLen(tmp) EQ 1) {
        tmp=Rematchnocase("[A-Za-z0-9.]*",tmp[1]);
        BrowserVer=tmp[2];
    }

    // Handle multiple BlackBerry browser strings
    if (Left(Browser,10) EQ "BlackBerry") Browser="BlackBerry";

    // Return result
    return Browser & " " & BrowserVer;

}

// Unable to identify browser
return "Unknown";

}
</cfscript>
<cfset webos_stats.browser= #browserDetect()#>

<!---\\End Getting Browser Type//--->

<!---\\Now We're going to get the user's Operating System, Version and Version Number//--->

        <cfset webos_stats.os = "">
   
   
      <cfif (HTTP_USER_AGENT CONTAINS "Windows NT 4.0") OR (HTTP_USER_AGENT CONTAINS "WinNT4.0")>
            <cfset webos_stats.os="Windows NT 4">
        <cfelseif HTTP_USER_AGENT CONTAINS "95">
            <cfset webos_stats.os="Windows 95">
        <cfelseif HTTP_USER_AGENT CONTAINS "98">
            <cfset webos_stats.os="Windows 98">
        <cfelseif HTTP_USER_AGENT CONTAINS "9x">
            <cfset webos_stats.os="Windows ME">
        <cfelseif  (HTTP_USER_AGENT CONTAINS "Windows 2000") OR ((HTTP_USER_AGENT CONTAINS "Windows NT 5.0") AND NOT (browser.ISNAVIGATOR AND browser.MAJORVERSION LTE 4))>
            <cfset webos_stats.os="Windows 2000">
        <cfelseif (HTTP_USER_AGENT CONTAINS "Windows NT 5.0") AND (browser.ISNAVIGATOR) AND (browser.MAJORVERSION LTE 4)>
            <cfset webos_stats.os="Windows XP">
        <cfelseif HTTP_USER_AGENT CONTAINS "Windows NT 5.1">
            <cfset webos_stats.os="Windows XP">
        <cfelseif HTTP_USER_AGENT CONTAINS "Windows XP">
            <cfset webos_stats.os="Windows XP">
        <cfelseif HTTP_USER_AGENT CONTAINS "Windows NT 5.2">
            <cfset webos_stats.os="Windows 2003">
        <cfelseif HTTP_USER_AGENT CONTAINS "Windows CE">
            <cfset webos_stats.os="Windows CE">
        <cfelseif HTTP_USER_AGENT CONTAINS "Windows NT 6.0">
            <cfset webos_stats.os="Windows Vista">
        <cfelseif HTTP_USER_AGENT CONTAINS "Windows Vista">   
            <cfset webos_stats.os="Windows Vista">
        <cfelseif HTTP_USER_AGENT CONTAINS "Windows NT 6.1">
            <cfset webos_stats.os="Windows 7">
        <cfelseif HTTP_USER_AGENT CONTAINS "Windows 7">   
            <cfset webos_stats.os="Windows 7">
        <cfelseif HTTP_USER_AGENT CONTAINS "Linux">
            <cfset webos_stats.os="Linux">
        <cfelseif HTTP_USER_AGENT CONTAINS "Unix">
            <cfset webos_stats.os="Unix">
        <cfelseif HTTP_USER_AGENT CONTAINS "SunOS">
            <cfset webos_stats.os="SunOS">
        <cfelseif HTTP_USER_AGENT CONTAINS "HP-UX">
            <cfset webos_stats.os="HP-UX">
        <cfelseif HTTP_USER_AGENT CONTAINS "MAC OS X">
            <cfset webos_stats.os="Mac OS X">
        <cfelseif HTTP_USER_AGENT CONTAINS "apple" OR HTTP_USER_AGENT CONTAINS "mac">
            <cfset webos_stats.os="Mac OS">
        <cfelseif HTTP_USER_AGENT CONTAINS "AmigaOS">
           
            <cfset webos_stats.os="AmigaOS">
        <cfelseif HTTP_USER_AGENT CONTAINS "FreeBSD">
           
            <cfset webos_stats.os="FreeBSD">
        <cfelseif HTTP_USER_AGENT CONTAINS "OS2">
           
            <cfset webos_stats.os="OS2">
        <cfelseif HTTP_USER_AGENT CONTAINS "WebTV">
            <cfset webos_stats.os="WebTV">
        <cfelse>
            <cfset webos_stats.os="">
        </cfif>
       

<!---\\End Getting User's Operating System//--->

<!---\\Stats Debugging//--->
<!---<cfdump label="WebOS User Stats" expand="yes" var="#webos_stats#">

<cfabort>--->
<!---\\End Stats Debugging//--->

<cfif NOT ISDEFINED('session.webos_visitor')>
<!---\\It is now time to save this data for Research and reporting//--->
        <!---\\Visitor is new so insert a new record//--->
            <cfquery name="getLastID" datasource="#webos.datasrc#" username="#webos.db_user#" password="#webos.db_pass#">
              Insert into site_statistics (referer, startpage, browser, screen_width, screen_height, screen_available_width, screen_available_height, colordepth, user_os, visitorip) VALUES ('#webos_stats.referer#', '#webos_stats.startpage#', '#webos_stats.browser#', '#webos_stats.ScreenResWidth#', '#webos_stats.ScreenResHeight#', '#webos_stats.ScreenResAvailableWidth#', '#webos_stats.ScreenResAvailableHeight#', '#webos_stats.ScreenResColorDepth#', '#webos_stats.os#', '#webos_stats.visitorip#')
            </cfquery>

        <!---\\Get the VisitorID from the record just entered above//--->
             <cfquery name="getLastID" datasource="#webos.datasrc#" username="#webos.db_user#" password="#webos.db_pass#">
              SELECT MAX(VisitorID) as lastID FROM site_statistics
            </cfquery>

        <!---\\Now Create a session//--->
            <cflock scope="Session" timeout="60" type="exclusive">
                <cfset session.webos_visitor = '#getLastID.LastID#'>
            </cflock>
</cfif>

 

About This Tutorial
Author: James Harvey
Skill Level: Beginner 
 
 
 
Platforms Tested: CFMX,CF8
Total Views: 28,292
Submission Date: September 24, 2009
Last Update Date: September 24, 2009
All Tutorials By This Autor: 12
Discuss This Tutorial
Advertisement

Sponsored By...
Powered By...