Mark Weaver wrote: > Hi All, > > I know this appears simple enough, but its really got my shorts in a > bunch. The problem, in short, is this; I need to create a cookie with > login information stored in the cookie and then I need to retrieve the > cookie for in-process authentication purposes. > > PROCESS: > > 1) when user initially logs in, receive login info > 2) check database for correct login or no > 3) if correct pass user through, create cookie and store. > 4) Cookie expires at end of session. > > MID-PROCESS: > while the user is in-session the cookie, named 'log_in' will need > to be accessed in order to pass authentication info back to the main > program which uses it to access a backend database to extract or insert > information. > > THE PROBLEM: > the main program is a single script that uses routines stored in > seperate modules local to the main program. ( All the routines, at one > time lived in the same script, but that just got too messy as the > program grew. ) The module which controls the creation of the cookie > being set is in a module by itself. It creates the cookie just fine when > the sub "setCookie" is called. However, if I attempt to test for the > existance of the cookie, i.e.
First of all, you should never code without a 'use strict' at the top of each file. I made some adjustments and combined the two cookie values into one using '::' separator (rather than using two cookies). Tested minimally only at the commandline. #!/usr/bin/perl -w -- use strict; require "updater_cookie.pm"; # the below code can be done using CGI parser more readily: my %FORM; read STDIN, my $buffer, $ENV{'CONTENT_LENGTH'} || 27; my @appdata = split /&/, $buffer; # Do a little quick decoding of all the form data so we can use it foreach my $appdata (@appdata) { my ($name, $value) = split /=/, $appdata; $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $FORM{$name} = $value; } # username/password coming in from form on cookieTest.html my $inUser = $FORM{'userName'}; my $inSecret = $FORM{'secret'}; # sending the username/password combo to the setCookie sub # to create and store the cookie information. setCookie ($inUser, $inSecret); my ($username, $passwd) = getCookie (); if ($username) { print <<EOD; <html> <head><title></title> </head> <body bgcolor="#ccddee"> <BR><BR><BR><BR> <div align=center> <h3> This is the information you input.<br> The username was: $username.<br> The password was: $passwd.<p> This is the end of the cookie Test. </h3> </div> </body> </html> EOD } else { print <<EOD; <html> <head><title></title> </head> <body bgcolor="#ccddee"> <BR><BR><BR><BR> <div align=center> <h1> There weren't any cookies for me to retrieve. </h1> </div> </body> </html> EOD } exit; __END__ use strict; use CGI qw/:standard/; use CGI::Cookie; # create and output the cookie sub setCookie { my ($user, $pass) = @_; my $cookie = new CGI::Cookie(-name => 'log_in', -value => "$user::$pass", -secure => '1'); # you could use the same CGI object that you *should* use to parse the form # data here: my $query = new CGI; print $query->header(-cookie=>$cookie); } # retreive the cookie information sub getCookie { my %cookies = parse CGI::Cookie ($ENV{HTTP_COOKIE}); if (exists $cookies{'log_in'}) { my $login = $cookies{'log_in'}->value; return split /::/, $login; } return (undef, undef); } 1; __END__ -- ,-/- __ _ _ $Bill Luebkert Mailto:[EMAIL PROTECTED] (_/ / ) // // DBE Collectibles Mailto:[EMAIL PROTECTED] / ) /--< o // // Castle of Medieval Myth & Magic http://www.todbe.com/ -/-' /___/_<_</_</_ http://dbecoll.tripod.com/ (My Perl/Lakers stuff) _______________________________________________ Perl-Unix-Users mailing list [EMAIL PROTECTED] To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs