tracking site visitors

There might be a delay between the first visit and the desired action (subscirbing to RSS, purchasing software, etc). An usual web site log often isn’t enough to match the former and the latter. The webmaster needs cookies.

Marking the visitors

For experienced system administrator, setting up cookies isn’t hard. At the moment, I use “experienced” as “with the secret knowledge how to make things simple”.

Let Apache tracks the visitors using its native functionality. Therefore, there is no need to modify all the existing scripts and to write new.

First, the module “mod_usertrack” should be activated:


LoadModule usertrack_module   modules/mod_usertrack.so
AddModule mod_usertrack.c

Second, the module should be configured:


<IfModule mod_usertrack.c>
CookieExpires "365 days"
CookieTracking On
</IfModule>

Logging the marks

The format of Apache logs isn’t fixed, one can configure it. (Is it surpise?) Let’s take the format named “combined” and derive “combined-cookie“:


LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User
-Agent}i\" \"%{Cookie}i\" \"%{Set-Cookie}o\"" combined-cookie

The explanation of these funny symbol is given in the documentation: “Module mod_log_config“. Comparing to “combined“, I’ve added two fields:

\"%{Cookie}i\" — all the cookies sent from the browser to the server.
\"%{Set-Cookie}o\" — the cookies which the server sets in the browser.

And we shouldn’t forget to use the newly defined format:

#CustomLog /var/log/httpd/access_log combined
CustomLog /var/log/httpd/access_log combined-cookie

All together

Let’s see how the setup works. Go to the site using lynx. You’ll see that the server sets the cookie “Apache“:


X.Y.Z.U - - [13/Aug/2007:04:52:51 +0000] "GET / HTTP/1.0" 2
008518 "-" "Lynx/2.8.6rel.2 libwww-FM/2.14 SSL-MM/1.4.1 Ope
nSSL/0.9.8d" "-" "Apache=91.6.30.36.1186980771868349; path=
/; expires=Tue, 12-Aug-08 04:52:51 GMT"

Accept the cookie in lynx, and reload the page. Now the log entry contains:


X.Y.Z.U - - [13/Aug/2007:04:54:39 +0000] "GET / HTTP/1.0" 2
00 8518 "http://uucode.com/" "Lynx/2.8.6rel.2 libwww-FM/2.1
4 SSL-MM/1.4.1 OpenSSL/0.9.8d" "Apache=91.6.30.36.118698077
1868349" "-"

Lynx sends the cookie “Apache“. The server doesn’t set new cookies.

Leave a Reply