Click here to Skip to main content
15,881,424 members
Articles / Web Development / ASP.NET
Article

Fast ASP.NET Hit Counter with Full Digit Graphic File Support

Rate me:
Please Sign up or sign in to vote.
4.77/5 (45 votes)
4 Oct 20024 min read 309.3K   5.6K   98   60
Fully customizable and fast site hit counter with multiple counters supported and done without using cookies or any extra files or settings!

Sample Image - FastCustomHitCounter.jpg

My Task

Basically I set out to create a nice graphically customizable counter using VB.NET and ASP.NET. After searching the web for a bit I realized that there wasn't really any good ASP.NET hit counter programs out there so I just had to make my own! :)

  1. I needed it to be capable of using any standard digits graphic that I wanted.
  2. It had to be able to count differently on multiple pages.
  3. It had to be FAST! No excess overhead by database calls or complex structures.
  4. It had to use session and application variables to keep track of hits - no cookies. I Needed an app that would only count each unique session and not every page refresh or not work on machines without cookies
  5. Most importantly, it had to be completely self encapsulated without me having to make any other supporting code from any part of the rest of my web site.

How It Works

You will find that the source is very well documented so there is really no need to go into it here. Specially for those who just wish to use the code. :)

Here is a generic flow of how it works in principal:

  • Get the current counter value from an application variable named, in part,from the ID. Since this is in an application variable, if someone else came to your site after say you did it would count just perfectly. ie - User 1 starts a new session at the site - counter goes fom 100 to 101, then User 2 starts a session with the site and counter goes to 102, then the first user refreshes his page and his counter changes to 102 also. Very cool.
  • Check if a temp session variable exists that is also based on the ID. If it doesn't then get the current count from text file (in case someone has changed it manually). Then increment the counter and save it to the application variable and the text file. Lastly setting the temp session variable so that the counter will not have to access the text file or increment the counter for the rest of the current user's session (most servers set the session timeout to 15 mins so the user will either have to close out his browsers and make a new session or not do anything on the site for 15 minutes before the system will count him again). This check here also only reads or writes to the text file when the counter is incrementing! Therefor any kind of delays in generating the counter due to only one person being able to write to the text file at a time are GREATLY limited - making the counter ultra fast even if you have 1000's of viewers in your site at the same time
  • Using the awesome graphic capabilities of .NET, the program then loads up the digit graphic (BTW - any graphic format that .NET natively supports will work -Gif,Jpg,etc.) and procedes to pull out the digits one at a time and build the new counter graphic. After it's built it simply returns the image to the caller.
Sort, simple, and extremely effective like all good program components should be! :)


How to Use It

The source code works on the principle of adding code like this to your page:

HTML
<img src="counter/counter.aspx?src=digits.gif&digits=5&id=countername">

counter/counter.aspx is the location and name of the program. (I highly recommend putting the counter program in it's own directory in your site so that it keeps your site clean :) )

src is set to whatever image file contains your counter's digits. The image location is relative to the location of the counter.aspx so I recommend just puting all of your different digit graphics in the same directory as the counter. The image must be in the standard 10 digit format (0 through 9) and all the digits must be of the same width as the program automatically gets the width of the digits by dividing the image width by 10. And the height of the digits is set by the height of the image. This is standard by all normal downloadable digit pics. There are many sites that you can get free digit images from (ie Click here for a big sampling)

digits is just simply set to the number of digits you want your counter to show.

id is a unique id to identify your counter. You just set this to anything to name your counter although you will have keep it to normal text cause your counter's text file will be named after it (not to mention the internal session and application variables that it uses). This feature lets you have many different counters in your site cause you can just name them differently.

As you will see when you start using it - it simply keeps the current count backed up in a text file named after the counter name. This allows you to set an initial value or modify the value to whatever you want.

That's all there is to it - ENJOY ALL! :)

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Web Developer
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
GeneralDoes Apache support ASPX Pin
BDavis09625-May-04 5:31
BDavis09625-May-04 5:31 
GeneralRe: Does Apache support ASPX Pin
Jason Webb11-Oct-04 8:48
Jason Webb11-Oct-04 8:48 
GeneralRe: Does Apache support ASPX Pin
mondog2k527-Dec-05 6:09
mondog2k527-Dec-05 6:09 
GeneralIt is working 100% Pin
fweinrebe20-May-04 22:47
fweinrebe20-May-04 22:47 
GeneralNot Working for me Pin
beland667-May-04 11:13
beland667-May-04 11:13 
QuestionWas this procedure for applying this code ever perfected? Pin
appdar13-Jul-07 5:43
appdar13-Jul-07 5:43 
GeneralHit Counter ASP.net. I can't make it work. Please Help. Thank You. Pin
27lamps28-Jan-04 1:53
27lamps28-Jan-04 1:53 
Generalstealinurforms Pin
Steve ParmIey23-Dec-03 6:02
Steve ParmIey23-Dec-03 6:02 
stealinurforms
GeneralMore counter pix Pin
Steve ParmIey16-Dec-03 2:42
Steve ParmIey16-Dec-03 2:42 
GeneralRe: More counter pix Pin
Steve ParmIey17-Dec-03 17:22
Steve ParmIey17-Dec-03 17:22 
GeneralApplication locking and optimization ... Pin
Matt Casto24-Sep-03 9:43
Matt Casto24-Sep-03 9:43 
QuestionRe: Application locking and optimization ... Pin
pshanks2-Jun-06 6:59
pshanks2-Jun-06 6:59 
AnswerRe: Application locking and optimization ... Pin
Matt Casto2-Jun-06 9:16
Matt Casto2-Jun-06 9:16 
QuestionWhat about Load-Balanced sites Pin
TigerNinja_11-Feb-03 17:41
TigerNinja_11-Feb-03 17:41 
AnswerRe: What about Load-Balanced sites Pin
Heath Stewart30-Apr-03 17:55
protectorHeath Stewart30-Apr-03 17:55 
GeneralInteresting Pin
mikestu4-Feb-03 13:59
mikestu4-Feb-03 13:59 
GeneralRe: Interesting Pin
endforward9-Feb-03 8:17
endforward9-Feb-03 8:17 
GeneralRe: Interesting Pin
blong6-Mar-03 14:25
blong6-Mar-03 14:25 
GeneralOnly part I don't like about this Pin
Tony Truong3-Feb-03 0:29
Tony Truong3-Feb-03 0:29 
GeneralRe: Only part I don't like about this Pin
TheSnarf23-Dec-04 3:44
TheSnarf23-Dec-04 3:44 
GeneralNot working for me. Pin
hkpillai5-Jan-03 21:17
hkpillai5-Jan-03 21:17 
GeneralRe: Not working for me. Pin
JediBaron8-Jan-03 7:32
JediBaron8-Jan-03 7:32 
GeneralRe: Not working for me. Pin
Shawn Weiler28-Jan-03 15:42
Shawn Weiler28-Jan-03 15:42 
GeneralRe: Not working for me. Pin
JediBaron28-Jan-03 18:41
JediBaron28-Jan-03 18:41 
GeneralRe: Not working for me. Pin
Shawn Weiler29-Jan-03 13:06
Shawn Weiler29-Jan-03 13:06 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.