--- "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]