setting cookie then redirect problem

Discussion in 'Perl' started by bagsmode, Jul 27, 2003.

  1. bagsmode

    bagsmode Guest

    Hi,

    I'm trying to set a session cookie and then redirect, however I get the
    error:

    Status: 302 Moved Location: /index.cgi

    I thought I recall getting an error like this when I first tried
    performing a redirect when I had left in
    print "Content-type:text/html\n\n";
    before the redirect. After removing that print statement, I was able to
    get the redirect test script to execute correctly.

    Now I'm getting this "Moved Location" message again. While I'm not doing
    the print of the Context.. I am doing a print when saving (?) the cookie
    info with:
    print $cgi->header( -cookie=>$cookie );

    BTW, I tried using #$CGI::Session->header($cgi); but I get an error when
    trying to use this about header not being defined or some-such.

    TIA
    Glenn

    Below is the full script:
    VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
    #!c:/Perl/bin/Perl.exe

    use CGI;
    use CGI::Session;
    use CGI::Carp qw(fatalsToBrowser);

    # READ IN VALUES

    read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
    @pairs = split(/&/, $buffer);
    foreach $pair (@pairs) {
    ($name, $value) = split(/=/, $pair);
    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $FORM{$name} = $value;
    }


    # SET "login" AND "pswd"
    $session = new CGI::Session("driver:File", undef,
    {Directory=>"/windows/temp"});
    foreach $key (sort (keys(%FORM))) {
    if ($FORM{$key} eq "") {
    die_nice("Please fill out the field for <b>$key</b>.");
    }
    $session->param($key, $FORM{$key});
    }

    $cgi = new CGI;
    $cookie = $cgi->cookie(CGISESSID => $session->id);
    print $cgi->header( -cookie=>$cookie );

    # REDIRECT BACK TO INDEX
    my $url = '/index.cgi';
    print $cgi->redirect($url);

    exit;

    sub die_nice {
    print "Content-type:text/html\n\n";
    print "<html><head><title>Login Failed</title></head><body>";
    my ($err_msg) = @_;
    print "<h2><b>Error</b></h2><p>";
    print "$err_msg<p>";
    print "<br>Use the BACK button to return to the form with your
    current fields filled in\n";
    print "</body></html>";
    exit;
    }
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     
    bagsmode, Jul 27, 2003
    #1
    1. Advertising

  2. bagsmode

    Jeff Bars Guest

    Something like this may help...

    reDir("http://wwww.somewhere.com/disclaimer.html");

    sub reDir{
    $IIS = ($ENV{'SERVER_SOFTWARE'} && ($ENV{'SERVER_SOFTWARE'} =~ /iis/i)) ?
    1:0;
    chdir($1) if (($IIS) && ($0 =~ /(.*)(\\|\/)/));
    print "HTTP/1.0 302 Temporary Redirection\r\n" if ($IIS);
    print "Content-type: text/html\r\n";
    print "Location: $_[0] \r\n\r\n";
    }

    -JB





    "bagsmode" <> wrote in message
    news:...
    > Hi,
    >
    > I'm trying to set a session cookie and then redirect, however I get the
    > error:
    >
    > Status: 302 Moved Location: /index.cgi
    >
    > I thought I recall getting an error like this when I first tried
    > performing a redirect when I had left in
    > print "Content-type:text/html\n\n";
    > before the redirect. After removing that print statement, I was able to
    > get the redirect test script to execute correctly.
    >
    > Now I'm getting this "Moved Location" message again. While I'm not doing
    > the print of the Context.. I am doing a print when saving (?) the cookie
    > info with:
    > print $cgi->header( -cookie=>$cookie );
    >
    > BTW, I tried using #$CGI::Session->header($cgi); but I get an error when
    > trying to use this about header not being defined or some-such.
    >
    > TIA
    > Glenn
    >
    > Below is the full script:
    > VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
    > #!c:/Perl/bin/Perl.exe
    >
    > use CGI;
    > use CGI::Session;
    > use CGI::Carp qw(fatalsToBrowser);
    >
    > # READ IN VALUES
    >
    > read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
    > @pairs = split(/&/, $buffer);
    > foreach $pair (@pairs) {
    > ($name, $value) = split(/=/, $pair);
    > $value =~ tr/+/ /;
    > $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    > $FORM{$name} = $value;
    > }
    >
    >
    > # SET "login" AND "pswd"
    > $session = new CGI::Session("driver:File", undef,
    > {Directory=>"/windows/temp"});
    > foreach $key (sort (keys(%FORM))) {
    > if ($FORM{$key} eq "") {
    > die_nice("Please fill out the field for <b>$key</b>.");
    > }
    > $session->param($key, $FORM{$key});
    > }
    >
    > $cgi = new CGI;
    > $cookie = $cgi->cookie(CGISESSID => $session->id);
    > print $cgi->header( -cookie=>$cookie );
    >
    > # REDIRECT BACK TO INDEX
    > my $url = '/index.cgi';
    > print $cgi->redirect($url);
    >
    > exit;
    >
    > sub die_nice {
    > print "Content-type:text/html\n\n";
    > print "<html><head><title>Login Failed</title></head><body>";
    > my ($err_msg) = @_;
    > print "<h2><b>Error</b></h2><p>";
    > print "$err_msg<p>";
    > print "<br>Use the BACK button to return to the form with your
    > current fields filled in\n";
    > print "</body></html>";
    > exit;
    > }
    > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    >



    ---
    Posted via news://freenews.netfront.net
    Complaints to
     
    Jeff Bars, Jul 28, 2003
    #2
    1. Advertising

  3. bagsmode

    bagsmode Guest

    Re: setting cookie--retrieval issue (was Re: setting cookie thenredirect problem)

    Jeff Bars wrote:
    > Something like this may help...
    >
    > reDir("http://wwww.somewhere.com/disclaimer.html");
    >
    > sub reDir{
    > $IIS = ($ENV{'SERVER_SOFTWARE'} && ($ENV{'SERVER_SOFTWARE'} =~ /iis/i)) ?
    > 1:0;
    > chdir($1) if (($IIS) && ($0 =~ /(.*)(\\|\/)/));
    > print "HTTP/1.0 302 Temporary Redirection\r\n" if ($IIS);
    > print "Content-type: text/html\r\n";
    > print "Location: $_[0] \r\n\r\n";
    > }
    >
    > -JB
    >
    > "bagsmode" <> wrote in message
    > news:...
    >
    >>Hi,
    >>
    >>I'm trying to set a session cookie and then redirect, however I get the
    >>error:
    >>
    >>Status: 302 Moved Location: /index.cgi
    >>
    >>I thought I recall getting an error like this when I first tried
    >>performing a redirect when I had left in
    >> print "Content-type:text/html\n\n";
    >>before the redirect. After removing that print statement, I was able to
    >>get the redirect test script to execute correctly.
    >>
    >>Now I'm getting this "Moved Location" message again. While I'm not doing
    >>the print of the Context.. I am doing a print when saving (?) the cookie
    >>info with:
    >> print $cgi->header( -cookie=>$cookie );
    >>
    >>BTW, I tried using #$CGI::Session->header($cgi); but I get an error when
    >>trying to use this about header not being defined or some-such.
    >>
    >>TIA
    >>Glenn
    >>
    >>Below is the full script:
    >>VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
    >>#!c:/Perl/bin/Perl.exe
    >>
    >>use CGI;
    >>use CGI::Session;
    >>use CGI::Carp qw(fatalsToBrowser);
    >>
    >># READ IN VALUES
    >>
    >>read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
    >>@pairs = split(/&/, $buffer);
    >>foreach $pair (@pairs) {
    >> ($name, $value) = split(/=/, $pair);
    >> $value =~ tr/+/ /;
    >> $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    >> $FORM{$name} = $value;
    >>}
    >>
    >>
    >># SET "login" AND "pswd"
    >>$session = new CGI::Session("driver:File", undef,
    >>{Directory=>"/windows/temp"});
    >>foreach $key (sort (keys(%FORM))) {
    >> if ($FORM{$key} eq "") {
    >> die_nice("Please fill out the field for <b>$key</b>.");
    >> }
    >> $session->param($key, $FORM{$key});
    >>}
    >>
    >>$cgi = new CGI;
    >>$cookie = $cgi->cookie(CGISESSID => $session->id);
    >>print $cgi->header( -cookie=>$cookie );
    >>
    >># REDIRECT BACK TO INDEX
    >>my $url = '/index.cgi';
    >>print $cgi->redirect($url);
    >>
    >>exit;
    >>
    >>sub die_nice {
    >> print "Content-type:text/html\n\n";
    >> print "<html><head><title>Login Failed</title></head><body>";
    >> my ($err_msg) = @_;
    >> print "<h2><b>Error</b></h2><p>";
    >> print "$err_msg<p>";
    >> print "<br>Use the BACK button to return to the form with your
    >>current fields filled in\n";
    >> print "</body></html>";
    >> exit;
    >>}
    >>^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^


    BTW, first off, let me thank Jeff for helping me with the redirect :)
    Ended up needing to do meta refresh to forward to the next page.

    Now, I'm having an issue with getting the information FROM the cookie.
    After saving the login info in the script above using:
    $session->param($key, $FORM{$key});
    (I'm getting the login information via POST form).

    Then I try to retry the information using the method shown at CPAN under
    CGI::Session::Tutorial :
    --- script redirected to after saving cookie info above ---
    #!c:/Perl/bin/Perl.exe

    use DBI;
    use CGI;
    use CGI::Session;
    use CGI::Carp qw(fatalsToBrowser);

    # CHECK FOR COOKIE INFO--IF DOESN'T EXIST, SEND TO LOGIN
    $cgi = new CGI;
    $sid = $cgi->cookie('CGISESSID') || $cgi->param('CGISESSID') || undef;
    $session = new CGI::Session(undef, $sid, {Directory=>'/windows/temp'});
    my $login_name = $session->param(-name=>'login');
    --- end ---

    When this executes, I get the following:
    Software error:

    flock() unimplemented on this platform at
    C:/Perl/lib/CGI/Session/File.pm line 54.

    Should I be using a different version since I'm on win98 of either
    CGI::Session or CGI::Session::File?

    Thanks,
    Glenn
     
    bagsmode, Jul 28, 2003
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. =?Utf-8?B?TWlrZQ==?=

    greater then / less then

    =?Utf-8?B?TWlrZQ==?=, Nov 4, 2004, in forum: ASP .Net
    Replies:
    2
    Views:
    1,617
    Kevin Spencer
    Nov 4, 2004
  2. Jeff Thies

    write cookie then redirect

    Jeff Thies, Jul 13, 2003, in forum: HTML
    Replies:
    0
    Views:
    490
    Jeff Thies
    Jul 13, 2003
  3. Sal
    Replies:
    1
    Views:
    896
  4. Replies:
    0
    Views:
    325
  5. Timur Tabi
    Replies:
    1
    Views:
    139
    Timur Tabi
    May 14, 2004
Loading...

Share This Page