http://www.perlmonks.org?node_id=1020396

pedrete has asked for the wisdom of the Perl Monks concerning the following question:

Hello Monks...

May i ask for 10nanoseconds of your wisdom, please???

I am having a small problem with CGI::Session and i am stuck... (for 3 days now)

I have an html page (login.html) that asks for user and password. When entered, login.pl checks for them, if they are correct then it creates a sesion and launches web.pl

web.pl checks if the session is valid. if so, then it shows the webpage but if not, it redirects to login.html

The problem is that it seems that the session created by $sesion=new CGI::Session(); is always empty when checked by web.pl . why???

Curiously, if the user enters the process twice (with correct credentials of course) then it works!!!

login.pl:
#!/usr/bin/perl use warnings; use CGI; use CGI::Session; $cgi=new CGI; if (CredentialsOK($user,$pwd)){ $sesion=new CGI::Session(); $sesion->param('userlogged',$user); print $sesion->header(-location=>"web.pl"); $sesion->flush(); } else { print $cgi->redirect(-uri=>"login.html"); }
web.pl
#!/usr/bin/perl use warnings; use CGI; use CGI::Session; use HTML::Template; $cgi=new CGI; $sesion=CGI::Session->load($cgi); $plantilla=HTML::Template->new(filename => 'web.html'); $sesion=CGI::Session->load(); if (($sesion->is_expired) || ($sesion->is_empty)) { print $cgi->redirect(-uri=>"login.html"); } else { print $cgi->header(); print $plantilla->output(); }

Thanks to all in advance!!

Pedrete.

Replies are listed 'Best First'.
Re: CGI::Session small problem...
by moritz (Cardinal) on Feb 24, 2013 at 13:12 UTC

      Thanks MOtirz

      I think the cookie gets to the user browser when i use the line
      print $sesion->header(-location=>"web.pl");

      And in fact i have checked and the cookie in the browser is ok... ans so in the server /tmp folder...

      Thanks,

      Pedrete

        You should monitor the HTTP requests with a browser extension such as LiveHTTPHeaders or just capture the network traffic with Ethereal. Paste the whole conversation from the first request (login.html) to the one hitting web.pl; we could perhaps figure out what's wrong. (Use a dummy username + password.)

Re: CGI::Session small problem...
by fishmonger (Chaplain) on Feb 24, 2013 at 17:17 UTC

    Why are you attempting to load the session twice?

    Remove the second call to CGI::Session->load() and add the strict pragma and fix the var declarations as needed (i.e., declare them with the 'my' keyword)

      Another suggestion to try is put your $sesion->header(...) statement after the flush statement