Konfusion: cgi redirect ergibt =>Status: 302 Moved location: http://...

Hallo alle,

ich konnte die Lösung zu folgendem Problem leider noch nicht finden, vielleicht kann mir da jemand weiterhelfen?

Das Perl soll nur auslesen, ob Benutzername und Passwort stimmen (gemeinsame Zugangsdaten für alle User) und dann auf eine URL weiterleiten. Man könnte zwar eine HTML-Datei mit <meta http-equiv="refresh"...> ausgeben lassen, aber das wäre doch recht unelegant, auch wegen eben dieser für eine Sekunde zwischengeschalteten Datei.

Ich habe zwei Code-Varianten, die beide dasselbe ausspucken:
Status: 302 Moved location: http://www.meinedomain.de/ordner/datei.html

Ich habe im Forums-Archiv etwas gelesen von CGI-Header, hat mich aber nicht weitergebracht.

Jetzt die beiden Code-Varianten:
----------------------------------------------------------------------------
#!/usr/local/bin/perl -w

use strict;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use CGI qw(param url);

print "content-type: text/html\n\n";
print "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">\n";

my $cgi = new CGI;

my $url = "http://www.meinedomain.de/ordner";
my $go  = "$url/datei.html";
my $err = "$url/error.html";

my $user  = "super";
my $passw = "toll";

if ((param("Benutzer") eq $user) and (param("Pass") eq $passw)) {
 print $cgi->redirect($go);
} else {
 print $cgi->redirect($err);
}
----------------------------------------------------------------------------
#!/usr/local/bin/perl -w

use strict;
use CGI::Carp qw(fatalsToBrowser);
use CGI qw(param url redirect);

print "content-type: text/html\n\n";
print "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">\n";

my $url = "http://www.meinedomain.de/ordner";
my $go  = "$url/datei.html";
my $err = "$url/error.html";

my $user  = "super";
my $passw = "toll";

if ((param("Benutzer") eq $user) and (param("Pass") eq $passw)) {
    print redirect($go);
} else {
    print redirect($err);
}
----------------------------------------------------------------------------

Vielleicht hat jemand die rettende Idee? ;-)

Danke schonmal, schönen Sonntag

Robin

  1. Jetzt die beiden Code-Varianten:

    ...
    print "content-type: text/html\n\n";
    print "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">\n";

    ...
    print $cgi->redirect($go);
    } else {
    print $cgi->redirect($err);
    }

    Wrong.
    Du hast schon mit print rausgespuckt. der Server sendet status 200. Die Header sektion ist abgeschlossen und dein header location bleibt wirkungslos.

    ----------------------------------------------------------------------------
    ...

    print "content-type: text/html\n\n";
    print "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">\n";

    ...

    print redirect($go);
    } else {
        print redirect($err);
    }

    Ebenfalls falsch aus dem eben genannten Grund.

    Vielleicht hat jemand die rettende Idee? ;-)

    Sende einen location header ODER sende HTML mit einem Link (ev. mit meta refresh).

    mfg Beat

    --
    Woran ich arbeite:
    X-Torah
       <°)))o><                      ><o(((°>o
    1. Wrong.
      Du hast schon mit print rausgespuckt. der Server sendet status 200. Die Header sektion ist abgeschlossen und dein header location bleibt wirkungslos.

      Natürlich,

      ich habe ja schon geprintet.
      Jetzt läufts, danke!

      Grüße, Robin

  2. Hallo Konfusion!

    Ich habe im Forums-Archiv etwas gelesen von CGI-Header, hat mich aber nicht weitergebracht.

    Es hat Dich sogar auf dem falsche Weg gebracht. Aus der CGI.pod:

    -------------------------------------
    =head2 GENERATING A REDIRECTION HEADER

    print redirect('http://somewhere.else/in/movie/land');

    Sometimes you don't want to produce a document yourself, but simply
    redirect the browser elsewhere, perhaps choosing a URL based on the
    time of day or the identity of the user.

    The redirect() function redirects the browser to a different URL.  If
    you use redirection like this, you should not print out a header as
    well.
    -------------------------------------

    Ansonsten tun Deine zwei Code-Varianten genau das selbe, in der ersten nutzt Du die OO-Schreibweise für die Methoden des CGI-Moduls, in der zweiten importierst Du sie.

    Viele Grüße aus Frankfurt/Main,
    Patrick

    --

    _ - jenseits vom delirium - _
    [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
    Nichts ist unmöglich? Doch!
    Heute schon gegökt?
    All'alba vincerò!