When you think ASP, think...
Recent Articles
All Articles
ASP.NET Articles
ASPFAQs.com
Message Board
Related Web Technologies
User Tips!
Coding Tips

Sections:
Sample Chapters
Commonly Asked Message Board Questions
JavaScript Tutorials
MSDN Communities Hub
Official Docs
Security
Stump the SQL Guru!
XML Info
Information:
Feedback
Author an Article
ASP ASP.NET ASP FAQs Message Board Feedback
Print this page.
Published: Tuesday, March 21, 2000

Recording Page Hits with Microsoft's Page Counter Object

By Scott Mitchell


Introduction:
We've all seen page counters on Web pages that indicate how many folks have visited a particular Web page. In fact, there are numerous articles on 4Guys detailing a plethora of ways to accomplish this functionality using ASP. (For solutions on creating a page counter check out Creating a Persistent Web Page Counter or Building a Simple Hit Counter in ASP.)

- continued -

'

Those custom script solutions for creating a Web page counter work nicely, but wouldn't it be nice to have a slick, efficient COM component to handle hit counts for a Web site as opposed to custom script? The good news is that there is already such a component from Microsoft, the PageCounter component of the IIS Resource Kit. The IIS Resource Kit contains some of the most powerful (and least known) COM components. In this article I will discuss just one of the many IIS Resource Kit components, the PageCounter component, which serves as a page counter for any number of Web pages on a Web site.

Unfortunately the documentation for these components is sketchy at best. From my research I found that these components are installed with IIS 5.0; however, these components may not be installed on IIS 4.0. Take a moment to check to see if you have these components installed. To run this test, create an ASP page on your Web server with this simple line of code:

<% Set obj = Server.CreateObject("MSWC.PageCounter") %>

If you receive a Server.CreateObject Failed, Invalid class string error message then the IIS Resource Kit components are not installed. (If you receive no error, just a blank HTML page, the components are installed.) If you don't have the components installed you can get them by buying the Microsoft Internet Information Server Resource Kit book (which ships with a CD with the components). Also, if you have an MSDN subscription you can obtain these components for free from Microsoft's MSDN Subscription site.

If you are Using PWS (or maybe even IIS 4.0?)
If you are using Personal Web Server (that is, if you are testing this on a Windows 9X box), and are getting the Server.CreateObject Failed, Invalid class string error message when trying to create an instance of the MSWC.PageCounter object, try changing MSWC.PageCounter to IISSample.PageCounter and see if it works. Some documentation I found in researching this component referred to IISSample.PageCounter when discussing these components with use on PWS.

Some readers have also reported that this "workaround" is needed on their IIS 4.0 Web server... worth a try if you're having problems using the PageCounter component.

Working with the PageCounter Object:
The PageCounter object is a compact COM component that serves a single purpose: to count the number of hits for a Web page. Assuming you have the PageCounter object installed on your Web server, you can create an instance of the object with a single line of code:

Set obj = Server.CreateObject("MSWC.PageCounter")

The PageCounter object contains three methods:

  • Hits() - this returns the number of hits the Web page has received.
  • PageHit() - this method increments the hit count by one
  • Reset() - resets the hit counter for the Web page back to zero

A simple example of incrementing the hit counter and displaying it's current value can be seen below:

<%
  Dim objPageCount
  Set objPageCount = Server.CreateObject("MSWC.PageCounter")

  'Increment the counter
  objPageCount.PageHit()
  
  'Display the total number of hits to the page
  Response.Write "There have been " & objPageCount.Hits() & " hits."
%>
[View a live demo!]

Realize that this PageCounter component is tracking the hits for the particular Web page that it appears on. It would make sense to place the above code in an include file. Those Web pages whose page views you were interested in tracking could then simply use a server-side include to import the above code. (To learn more about server-side includes be sure to read The Low-Down on #include! Also, to learn how to fancy up the display of the hit count be sure to read: Representing Numbers Graphically.)

The PageCounter Object in Detail:
So how does the PageCounter component manage to keep track of the hits for a Web page? Since we would like the number of page hits to persist over Web server restarts and machine reboots this information must be stored in some persistent medium - in this case, a text file. The text file used by the PageCounter object, by default, is: c:\winnt\system32\inetsrv\data\HitCnt.cnt. This file is a simple text file containing a list of Web page URLs and their associated hit counts in the following format:

50	/SomePage.asp
75	/Foo/SomeOtherPage.asp
25	/AnotherPage.asp
175	/YetAnotherPage.asp

Take a moment to locate this file and examine it. If you just started using the PageCounter component you may find that the file's not present, or that the count it records is slightly off. This is because as the hit counter is increased for a page, the hit count is stored in memory for faster access. After every so many hits (25 by default) this page count value is persisted to disk.

One nice thing about the PageCounter component is that you can specify both the text file to write the page hits to and how many hits are required before the text file is updated with the current hits for the pages. Unfortunately these settings are not available through a COM property; rather, you must muck through the registry. To make these changes, edit the \HK_CLASSES_ROOT\MSWC.PageCounter registry entry. You'll note there are two settings: File_Location, which indicates the text file to persist the page hits to; and Save_Count, which specifies the number of hits needed before the count is saved to disk.

Conclusion:
If you have the PageCounter component installed on your Web server you now know of an easy way to track hits for any Web page on your site! This component is easy to use, requiring only a few lines of code and, best of all, the page hit counts are persisted over Web server restarts.

Happy Programming!


Related Links:

  • View a live demo of the PageCounter object!
  • View the technical docs.



  • ASP.NET [1.x] [2.0] | ASPMessageboard.com | ASPFAQs.com | Advertise | Feedback | Author an Article