Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Re: CGI redirect

by dsheroh (Monsignor)
on Aug 05, 2009 at 15:18 UTC ( [id://786140]=note: print w/replies, xml ) Need Help??


in reply to CGI redirect

An HTTP response can only have one set of headers. The redirect must be the absolute first thing you print - no print header;, no print start_html;, no print end_html;. Nothing. (And there's generally little point in printing anything else after it).

Replies are listed 'Best First'.
Re^2: CGI redirect
by Anonymous Monk on Aug 06, 2009 at 01:14 UTC

    Though there is sometimes point in exit()ing after it. There's a fairly well known attack which involves client-side trickery to avoid following a refresh, because sometimes (i.e. in very poorly written code) you'll get a valid page of data instead of, for instance, the redirected login page you should have got.

    Hi monks, I've taken up CGI recently

    ... I'm not sure that's something you admit to in public... (kidding)

Re^2: CGI redirect
by jithint (Novice) on Aug 06, 2009 at 18:39 UTC
    Thanks for the reply. I removed the headers from poll.cgi. Now I get a 'Page cannot be displayed error'. The problem is, poll.cgi takes the vote and writes it to a file. results.cgi reads the file after each vote and populates a table.

    poll.cgi
    #!C:/Perl/bin/perl -wT use CGI qw(:standard); use CGI::Carp qw(warningsToBrowser fatalsToBrowser); use strict; use Fcntl qw(:flock :seek); my $outfile="poll.txt"; if(param('club')){ open(POLL,">>$outfile") or dienice ("Can't open poll.txt: $!"); flock(POLL, LOCK_EX); seek(POLL,0,SEEK_END); print POLL param('club')."\n"; close(POLL); } #redirect to result.cgi print redirect ("http://10.20.91.122/cgi-bin/results.cgi"); sub dienice { my($msg) = @_; print header; print start_html("Error"); print h2("Error"); print $msg; print end_html; exit; }
    results.cgi
    #!C:/Perl/bin/perl -wT use CGI qw(:standard); use CGI::Carp qw(fatalsToBrowser warningsToBrowser); use strict; use Fcntl qw(:flock :seek); print header; print start_html; my $outfile="poll.txt"; open(POLL,"$outfile") or dienice("Can't open $outfile:$!"); #set a shared lock on the file flock(POLL,LOCK_SH); #seek the beginning of the file seek(POLL,0,SEEK_SET); my(%count,$total_count); $total_count=0; foreach my $i ("mutd","che","ars","liv","none"){ $count{$i}=0; } while(my $rec=<POLL>){ chomp($rec); $total_count = $total_count+1; $count{$rec} = $count{$rec}+1; } print <<END; <b>Which is your favorite club?</b><br> <table border=0 width=50%> <tr> <td>Manchester United<td> <td>$count{mutd} votes<td> <tr> <td>Arsenal<td> <td>$count{ars} votes<td> <tr> <td>Chelsea<td> <td>$count{che} votes<td> <tr> <td>Liverpool<td> <td>$count{liv} votes<td> <tr> <td>Others<td> <td>$count{none} votes<td> </table> END print end_html; sub dienice { my($msg) = @_; print h2("Error"); print $msg; print end_html; exit; }
      Thanks guys. Now it works. I removed all the headers (header,start_html,end_html) and used :
      print "Location: http://abc/xyz\n\n"
      Now it redirects correctly.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://786140]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (4)
As of 2025-06-16 16:39 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.