mod_usertrack.c revision ff250fa78a491f4dcf3e673f122f2d9942a7411a
2N/A/* ==================================================================== 2N/A * The Apache Software License, Version 1.1 2N/A * Copyright (c) 2000 The Apache Software Foundation. All rights 2N/A * Redistribution and use in source and binary forms, with or without 2N/A * modification, are permitted provided that the following conditions 2N/A * 1. Redistributions of source code must retain the above copyright 2N/A * notice, this list of conditions and the following disclaimer. 2N/A * 2. Redistributions in binary form must reproduce the above copyright 2N/A * notice, this list of conditions and the following disclaimer in 2N/A * the documentation and/or other materials provided with the 2N/A * 3. The end-user documentation included with the redistribution, 2N/A * if any, must include the following acknowledgment: 2N/A * "This product includes software developed by the 2N/A * Alternately, this acknowledgment may appear in the software itself, 2N/A * if and wherever such third-party acknowledgments normally appear. 2N/A * 4. The names "Apache" and "Apache Software Foundation" must 2N/A * not be used to endorse or promote products derived from this 2N/A * software without prior written permission. For written 2N/A * permission, please contact apache@apache.org. 2N/A * 5. Products derived from this software may not be called "Apache", 12N/A * nor may "Apache" appear in their name, without prior written 12N/A * permission of the Apache Software Foundation. 2N/A * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED 2N/A * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 2N/A * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 26N/A * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR 26N/A * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2N/A * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 26N/A * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 38N/A * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 26N/A * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 26N/A * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 26N/A * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26N/A * ==================================================================== 26N/A * This software consists of voluntary contributions made by many 26N/A * individuals on behalf of the Apache Software Foundation. For more 26N/A * information on the Apache Software Foundation, please see 26N/A * Portions of this software are based upon public domain software 26N/A * originally written at the National Center for Supercomputing Applications, 26N/A * University of Illinois, Urbana-Champaign. 26N/A * This Apache module is designed to track users paths through a site. 26N/A * It uses the client-side state ("Cookie") protocol developed by Netscape. 2N/A * It is known to work on Netscape browsers, Microsoft Internet 26N/A * Explorer and others currently being developed. 26N/A * Each time a page is requested we look to see if the browser is sending 26N/A * us a Cookie: header that we previously generated. 26N/A * If we don't find one then the user hasn't been to this site since 26N/A * starting their browser or their browser doesn't support cookies. So 26N/A * we generate a unique Cookie for the transaction and send it back to 26N/A * the browser (via a "Set-Cookie" header) 26N/A * Future requests from the same browser should keep the same Cookie line. 26N/A * By matching up all the requests with the same cookie you can 26N/A * work out exactly what path a user took through your site. To log 2N/A * the cookie use the " %{Cookie}n " directive in a custom access log; 26N/A * Example 1 : If you currently use the standard Log file format (CLF) 27N/A * and use the command "TransferLog somefilename", add the line 27N/A * LogFormat "%h %l %u %t \"%r\" %s %b %{Cookie}n" 27N/A * to your config file. 26N/A * Example 2 : If you used to use the old "CookieLog" directive, you 12N/A * can emulate it by adding the following command to your config file 30N/A * CustomLog filename "%{Cookie}n \"%r\" %t" 26N/A * 1. This code now logs the initial transaction (the one that created 2N/A * the cookie to start with). 26N/A * 2. This module has been designed to not interfere with other Cookies 30N/A * your site may be using; just avoid sending out cookies with 26N/A * the name "Apache=" or things will get confused. 2N/A * 3. If you want you can modify the Set-Cookie line so that the Cookie 7N/A * never expires. You would then get the same Cookie each time the 27N/A * user revisits your site. 27N/A * Mark Cox, mark@ukweb.com, 6 July 95 46N/A/* Make Cookie: Now we have to generate something that is going to be 46N/A * pretty unique. We can base it on the pid, time, hostip */ 46N/A /* 1024 == hardcoded constant */ 38N/A /* XXX: hmm, this should really tie in with mod_unique_id */ 26N/A /* Cookie with date; as strftime '%a, %d-%h-%y %H:%M:%S GMT' */ 32N/A "%s=%s; path=/; expires=%s, %.2d-%s-%.2d %.2d:%.2d:%.2d GMT",
32N/A /* Set the cookie in a note, for logging */ 38N/A return DECLINED;
/* There's already a cookie, no new one */ 32N/A return OK;
/* We set our cookie */ /* The simple case first - all numbers (we assume) */ * The harder case - stolen from mod_expires * CookieExpires "[plus] {<num> <type>}*" return "bad expires code, numeric value expected.";
return "bad expires code, missing <type>";
return "bad expires code, unrecognized type";
"whether or not to enable cookies"),
"name of the tracking cookie"),
NULL,
/* dir merger --- default is to override */ NULL,
/* merge server configs */