--- "Kirk W. Batzer" <[EMAIL PROTECTED]> wrote:
> I'm attempting to port a perl CGI application
> from: "perl, 5.005_02 built for 3446-svr4.0"
> to: "perl, v5.6.1 built for sun4-solaris"
>
> The application uses "cookies" to maintain "state" information. The
> following code is successfully creating and using cookies in the perl
> 5.5 , but failing to create cookies in the perl 5.6 environment.
>
> ======================
> use CGI qw(:standard);
> use MIME::Base64;
> ..........
> %mylist = &SelectFromTable(*table, *collist, *wherelist);
>
> local(@userinfo) = ( $mylist{userid},
> $mylist{usertype},
> $mylist{username},
> $mylist{phone},
> $mylist{groupname},
> $mylist{email});
>
> local($user) = encode_base64( join(":", @userinfo) );
>
> $cookie = cookie( -name=>'loginfo',
> -value=>$user,
> );
> print header(-cookie=>$cookie);
>
> ===========================
Kirk,
The code above looks fine. However, since we're only seeing a portion of the code,
it's quite
possible that there is something else in the code that could be causing an issue. For
example,
since you do not appear to be using strict, you may have a typo in a variable name
that doesn't
show up.
Have you verified that &SelectFromTable is actually populating %mylist?
Common debugging technique when using cookies: When you set the cookie, write the
cookie to the
error log in addition to sending it in the headers.
1. What's the expiration on the cookie? If your computer's time is off, this could
cause a
problem.
2. What's the domain? This is the biggest source of 'porting' errors that I have
seen. Make
sure that the domain the cookie has is the *same* as the domain to which you intend to
send the
cookie! Sometimes when porting apps, the developers still has form tags and links
pointing to
another domain. This will break your cookies. Also, does the domain have at least
two dots?
3. What's the path? If the path says /admin/cgi-bin/, cookies will only be sent to
that path and
extensions of that path. They will not be returned to /admin/.
4. Is the secure flag set? I once had a heck of a time trying to figure out why an
administrative console of my wouldn't set cookies until I realized that we had moved
the site and
forgotten the SSL certificate. Cookies sent as "secure" will only be returned over an
encrypted
connection.
5. Is there a typo in the name?
In the script that should receive the cookie, but isn't, try the following (assume the
CGI object
is named $query):
use Data::Dumper;
my $cookie_val = $query->cookie( 'loginfo' );
warn Dumper $query;
That will dump the details of your CGI object to your error log. It's ugly, but it
works. You
can then check to see if any cookies have been set. Note that (at least on my version
of CGI.pm)
you have to try to assign one of the cookie values to get the cookies added to the CGI
object.
In the event that you are using the function oriented interface, you can use the
following trick:
use CGI qw/:standard/;
my $cookie_val = cookie('id');
my $cgi = &CGI::self_or_default;
warn Dumper $cgi;
The &CGI::self_or_default method should return the CGI object that CGI.pm uses
internally. Here's
a test script you can use to verify that cookies are being set. Run this through a
browser.
You'll have to execute it twice (once to set the cookie and once to get it back).
#!D:/perl/bin/perl.exe -w
use strict;
use Data::Dumper;
use CGI qw/:standard/;
my $cookie = cookie( -name => 'id',
-value => '1234' );
my $cook_val = cookie('id');
my $cgi = &CGI::self_or_default;
my $dump = Dumper $cgi;
print header(-cookie=>$cookie),
pre( header(-cookie=>$cookie) ),
start_html,
pre( $dump ),
end_html;
On my machine, after the second time I've executed it, I get the following output in
the browser:
Set-Cookie: id=1234; path=/
Date: Wed, 31 Oct 2001 17:26:53 GMT
Content-Type: text/html; charset=ISO-8859-1
$VAR1 = bless( {
'.charset' => 'ISO-8859-1',
'.parameters' => [],
'.fieldnames' => {},
'.cookies' => {
'id' => bless( {
'path' => '/',
'value' => [
'1234'
],
'name' => 'id'
}, 'CGI::Cookie' )
}
}, 'CGI' );
Note that the cookie is clearly visible. I've also added the header to the body of
the document
so you can see what the browsers getting.
Good luck!
Cheers,
Curtis "Ovid" Poe
=====
Senior Programmer
Onsite! Technology (http://www.onsitetech.com/)
"Ovid" on http://www.perlmonks.org/
__________________________________________________
Do You Yahoo!?
Make a great connection at Yahoo! Personals.
http://personals.yahoo.com
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]