You are viewing a plain-jane printable version of http://CoverYourASP.com/LimitIP2.asp.
See how this was done

 

One clickthrough per IP per day

The first idea I implemented was to only count one clickthough per IP address per day. I didn't want to use a database or file to store the IP addresses, and then search for them - that's a little over the top. So I had the idea that I'd use an Application variable - which would get emptied each day.

The BrandNewDay ( ) function

First I initialized some variables. This code was added to global.asa's Application_OnStart function - IIS calls this function automatically when the server starts up...

function Application_OnStart ( )
{
   Application.Lock ( );

   // remember todays date
   var d = new Date;
   Application ( 'Today' ) = d.getDate ( );

   // initialize new stuff in utils/Init.asp
   Application ( 'BrandNewDay' ) = 1;

   // a list of IP addresses that have clicked an ad
   Application ( 'ClickFromIP' ) = '';

   Application.Unlock ( );
}

...then I reset the BrandNewDay when the date rolled over (incidentally, I can also reset it manually by calling the BrandNewDay.asp page, which is sometimes handy. I'll leave you to look at that page):

function Session_OnStart ( )
{
   Application.Lock ( );

   // is it a new day?
   var d = new Date;

   if ( Application ( 'Today' ) != d.getDate ( ) )
      Application ( 'BrandNewDay' ) = 1;

   Application.Unlock ( );
}

Now I know when the day changed I modified utils/Init.asp so that a new BrandNewDay ( ) function gets called when this Application variable is set. I also cleared the Application ( 'ClickFromIP' ) variable that I'll use in a minute:

// ============================================
// anything that needs doing once per day!
// ============================================
function BrandNewDay ( )
{
   if ( Application ( 'BrandNewDay' ) == 1 )
   {
      Application.Lock ( );

      // clear the list if IP addresses that are ignored
      Application ( 'ClickFromIP' ) = '';

      Application ( 'BrandNewDay' ) = 0;

      Application.Unlock ( );
   }
}

Part 3: Application ( 'ClickFromIP' )...