On 01/21/2007 04:55 PM, tom tom wrote:
Hi,
In my mod_perl (Authentication module). I have global
variable defined as follows
use vars qw( $SESSION_CLEANUP_COUNTER);
$SESSION_CLEANUP_COUNTER=0;
my intention is to count no of times it is getting
executed by clients (no of hits). I am incrementing it
within Authenticate method as follows.
$SESSION_CLEANUP_COUNTER ++,
But everytime it prints 1.
How can I get this going,
I am not an expert in mod_perl.
Mod_perl is good with making program loading more efficient, but my
experience has been that it's not very good a storing
constantly-changing data such as the counter you created.
Apache starts several processes to handle requests, and mod_perl is
active in each process, but each process has its own data, and you can't
guarantee that the same process that handles *this* request will handle
the *next* request.
For example, take these four processes:
USER PID PROGRAM
root 5105 apache2
www-data 5106 apache2
www-data 5107 apache2
www-data 5108 apache2
Any requests will be served by either pid 5106 or 5107 or 5108. If 5106
gets the first HTTP request, the instance of mod_perl in 5106 will set
$SESSION_CLEANUP_COUNTER in 5106, but 5107 and 5108 will be unaffected.
If the next request goes to 5107, $SESSION_CLEANUP_COUNTER will start
off with an "undef" value. If you keep quickly hitting "refresh" on the
page, you should eventually see some incrementing--but it will be uneven
because each apache2 process will have a different
$SESSION_CLEANUP_COUNTER, and the assigning of HTTP requests to apache
sub-processes seems to be semi-random.
Mod_perl is great for making static data and module procedures more
efficient; however, I think that data that *must* be updated in a linear
fashion yet shared between several apache processes should be stored
externally--in a database or a file (on ramdisk?) or in IPC.
Again, this is my €0.0002 from my limited experience with mod_perl and a
lot of deduction.
Well perhaps there was a little induction too: try this program to prove
to yourself that each mod_perl process has a different copy of the $sc
variable:
use strict;
use warnings;
our $sc;
$sc++;
print "Content-Type: text/html\n";
print "\n";
print qq{
<title> Session Cleanup Test </title>
<p> This is a test: $sc . <br>
PID: $$
</p>
};
__END__
Keep hitting refresh. So long as the PID stays the same, $sc increments
normally, but when apache assigns a new sub-process to deal with
requests, $sc restarts at the beginning (1).
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/