248 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			248 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|                         Page Counter Component
 | |
|                         ======================
 | |
| 
 | |
| 
 | |
| Table of Contents
 | |
| =================
 | |
| 
 | |
|     Overview
 | |
|     Installation
 | |
|     Usage
 | |
|     File List
 | |
|     Sample ASP
 | |
|     Shortcomings
 | |
|     Build Notes
 | |
|     Support
 | |
|     Registry Entries
 | |
|     Data Format
 | |
|     Change Notes
 | |
| 
 | |
| 
 | |
| Overview
 | |
| ========
 | |
| 
 | |
| The Page Counter Component provides the functionality of a basic page
 | |
| counter, sometimes called a 'Hit Counter', which is used to track the
 | |
| number of hits to one or more HTML pages; i.e., the total number of
 | |
| times that a page has been accessed by anyone anywhere.
 | |
| 
 | |
| This page counter is somewhat different from the typical counter in a
 | |
| couple of key ways.  First, the page counter stores its array of pages
 | |
| and their corresponding hit counts to disk periodically.  This
 | |
| provides a persistent record of hit activity.  This data is read from
 | |
| disk the first time the page counter dll is loaded, and it is written
 | |
| back to disk when the page counter dll is unloaded.  This information
 | |
| is also saved to disk at user-definable intervals based on the total
 | |
| number of hits recorded by the counter.
 | |
| 
 | |
| A second difference is the way that the page counter tracks page hits.
 | |
| The page counter uses a Central Counter Manager (CCM) to track and
 | |
| persist all page hits on the server.  This CCM is implemented as a
 | |
| global C++ object in the PageCnt.dll. This implementation allows all
 | |
| the page hit information to be stored in a single text file.
 | |
| 
 | |
| Using the CCM to manage the table of page hit information has less
 | |
| overhead than a solution that implements a page counter as a
 | |
| page-level object, requiring a separate file (or registry entry or
 | |
| database table entry) for each page.  Implementing this as an
 | |
| application-level object would not work because there would be no call
 | |
| to OnStartPage, which is needed both to increment the page's hit count
 | |
| and to get the page's name from the ServerVariables collection.
 | |
| 
 | |
| 
 | |
| Installation
 | |
| ============
 | |
| 
 | |
| In order to use this component you must register it.  This will allow Active
 | |
| Server Pages (ASP) Scripting Languages and other languages to make use of
 | |
| the component.  ASP uses either the Server.CreateObject("ObjectName") syntax
 | |
| or the <object id="myName" progid="ObjectName" runat="server"> syntax to
 | |
| gain access to an object.  New objects can be made ready for use by
 | |
| installing a new component.  Note: One component may contain more than one
 | |
| object definition.
 | |
| 
 | |
| The following directions are to help you register the component for use:
 | |
|  1. Use the Start menu, Programs option to start a Command Prompt
 | |
|  2. Type the following:
 | |
| 	cd \InetPub\ASPSamp\Components\PageCnt\DLL\i386
 | |
|  3. Type:
 | |
| 	regsvr32 PageCnt.dll
 | |
| Note: you must register the component on each IIS server where you intend
 | |
| to use it.
 | |
| 
 | |
| If you have trouble registering components, you may be using the wrong
 | |
| version of RegSvr32.exe.  Please use the version installed by default in
 | |
| the directory <InstallDir>\ASP\Cmpnts.  On Windows NT, the default
 | |
| installation directory is \winnt\System32\Inetsrv.  On Windows 95, it is
 | |
| \Program Files\WebSvr\System.
 | |
| 
 | |
| (If you rebuild the source code, the makefile will automatically reregister
 | |
| the component for you.)
 | |
| 
 | |
| The following directions are to help you test the registered component:
 | |
|  1. Use the Windows Explorer to copy all of the Sample files from
 | |
|     \InetPub\ASPSamp\Components\PageCnt\Samples to \InetPub\ASPSamp\Samples.
 | |
|  2. In your browser, open http://localhost/ASPSamp/Samples/PageCnt.asp
 | |
| You must copy the sample file to a virtual directory; if you attempt to
 | |
| examine it with a browser in the PageCnt\Samples directory, ASP will not
 | |
| execute the script.
 | |
| 
 | |
| 
 | |
| Usage
 | |
| =====
 | |
| 
 | |
| To use the Page Counter, simply call Server.CreateObject on the page
 | |
| for which you want to track hits.  When the page is loaded and
 | |
| CreateObject is called, ASP will automatically call the object's
 | |
| OnStartPage method.  In OnStartPage the Page Counter object determines
 | |
| what its PATH_INFO is and automatically increments its count with the
 | |
| CCM.  If you want to output the current number of hits for this page,
 | |
| call the Hits method for this object.  If you provide valid PATH_INFO
 | |
| information to Hits, it will return the current count for the
 | |
| specified page.  If you don't provide any PATH_INFO, Hits will return
 | |
| the count for the current page.  In a similar manner, you may call the
 | |
| Reset method to reset a page's count to zero.
 | |
| 
 | |
| See the accompanying documentation for more detail.
 | |
| 
 | |
| 
 | |
| File List
 | |
| =========
 | |
| 
 | |
| File             Description
 | |
| ----             -----------
 | |
| 
 | |
| .\Source
 | |
| 
 | |
|  ccm.cpp         the C++ source code for the central counter manager, CCM
 | |
|  ccm.h           declarations for CCM
 | |
|  PgCntObj.cpp    the C++ source code for the page counter component, CPgCntObj
 | |
|  PgCntObj.h      declarations for CPgCntObj
 | |
|  PgCnt.idl       the declaration of IPgCntObj, the IDispatch-based interface
 | |
|  Makefile        a makefile that can be used with nmake
 | |
|  PageCnt.mak     the Developer Studio makefile
 | |
|  debug.cpp       useful debugging stubs
 | |
|  debug.h         useful debugging macros and declarations for debug.cpp
 | |
|  CritSec.h       CRITICAL_SECTION wrapper
 | |
|  Page.cpp        classes to manage the hit counts and the list of hit counts
 | |
|  Page.h          declarations for CPage and CPageArray
 | |
|  PgCnt.cpp       ) DllMain and Registration code
 | |
|  PgCnt.def       )
 | |
|  PageCnt.mdp     )
 | |
|  PgCnt.rc        )
 | |
|  PgCntPS.def     } Generated by the ATL COM AppWizard
 | |
|  PgCntPS.mak     )
 | |
|  Resource.h      )
 | |
|  StdAfx.cpp      )
 | |
|  StdAfx.h        )
 | |
| 
 | |
| .\Samples
 | |
| 
 | |
|  PageCnt.asp     Simple script demonstrating the use of the page counter
 | |
| 
 | |
| 
 | |
| Samples
 | |
| =======
 | |
| 
 | |
| You must copy the sample to a virtual directory (it need not be a
 | |
| virtual root) on an IIS Server before it will work.
 | |
| 
 | |
| 
 | |
| Shortcomings
 | |
| ============
 | |
| 
 | |
| The Page Counter component will not work well with a large number of
 | |
| hit counters.  It would not be hard to rewrite Page.cpp to use a
 | |
| better searching strategy, such as a hash table.  For really large
 | |
| numbers of hit counters, you should use a real database.
 | |
| 
 | |
| The Page Counter component returns textual hit counters.  If you want
 | |
| fancy graphical counters, you'll have to build them yourself.
 | |
| 
 | |
| 
 | |
| Build Notes
 | |
| ===========
 | |
| 
 | |
| This sample requires Microsoft Visual C++ 4.2b or newer.  If you are using
 | |
| VC 4.2, it is necessary that you upgrade to VC 4.2b, using the patch which
 | |
| can be found at http://www.microsoft.com/visualc/patches/v4.2b/vc42b.htm
 | |
| Note that this patch will not work with earlier or later versions of
 | |
| Visual C++, only with VC 4.2.
 | |
| 
 | |
| This sample also requires ATL (Microsoft Active Template Library)
 | |
| version 2.0 or newer.  ATL 2.1 ships with Visual C++ 5.0.  ATL 2.0 for
 | |
| VC 4.2b can be downloaded from: http://www.microsoft.com/visualc/prodinfo/
 | |
| You do not need the ATL Docs or Object Wizard Technology Preview to build
 | |
| the registry access component, but you will probably find them useful.
 | |
| 
 | |
| If you get an error about "don't know how to make asptlb.h", you will
 | |
| need to copy <InstallDir>\ASP\Cmpnts\AspTlb.h to your include
 | |
| directory.
 | |
| 
 | |
| You can build this component with nmake at the command line.  Read
 | |
| Makefile for more details.  You can also build it in Microsoft
 | |
| Developer Studio, using the PgCnt.mdp project.
 | |
| 
 | |
| The component can be built as ANSI or Unicode.  If you intend to run
 | |
| it on Windows 95, build it as ANSI.
 | |
| 
 | |
| 
 | |
| Support
 | |
| =======
 | |
| 
 | |
| This component is not officially supported by Microsoft Corporation.
 | |
| Peer support is available on the Active Server Pages mailing list or on
 | |
| the microsoft.public.inetserver.iis.activeserverpages newsgroup.
 | |
| 
 | |
| To subscribe to the Active Server Pages mailing list, send mail to
 | |
| listserv@listserv.msn.com with
 | |
| 
 | |
| subscribe Denali [firstname lastname]
 | |
| 
 | |
| in the body of the message, and then follow the directions carefully.
 | |
| (firstname and lastname are optional.)
 | |
| 
 | |
| You can reach the newsgroup through msnews.microsoft.com and other NNTP
 | |
| servers.
 | |
| 
 | |
| 
 | |
| Registry Entries
 | |
| ================
 | |
| 
 | |
| Note: these values are reset to their defaults whenever the Page
 | |
| Counter DLL is registered with regsvr32.exe.
 | |
| 
 | |
| 
 | |
| Data Format
 | |
| ===========
 | |
| 
 | |
| The page counter records its data using the PATH_INFO ServerVariable
 | |
| to identify a given page.  Here is an example of the file persisted 
 | |
| by the page counter object.  
 | |
| --
 | |
| 3      /virtual_root1/page1.asp
 | |
| 10     /virtual_root1/page2.asp
 | |
| 14     /joeuser/default.asp
 | |
| --
 | |
| WARNING: If you modify this file yourself, make sure it matches the
 | |
| format shown above.  If it does not, the Page Counter will not be able
 | |
| to reload the persisted data properly.
 | |
| 
 | |
| 
 | |
| Change Notes
 | |
| ============
 | |
| 
 | |
| Beta 1: February 1997
 | |
| ---------------------
 | |
| 
 | |
| First release.
 | |
| 
 | |
| 
 | |
| Beta 2: March 1997
 | |
| ------------------
 | |
| 
 | |
| * Fixed Developer Studio makefile problems in C++ components.
 | |
| * Upgraded to build cleanly with ATL 2.0 (Visual C++ 4.2b) and ATL 2.0 (VC5).
 | |
| * Type Library name changes
 | |
| * Check for new returning NULL a la ATL itself
 |