Johann: Cookie erzeugen und dann weiterleiten

Hallo,

ich hab ein kleines Problem.
Ich möchte einen Cookie anlegen und danach sofort auf eine Website weiterleiten.
Hier mein Code:

my $create_cookie = $cgimodul->cookie(-name=>'xxx',
                            -value=>"$_[0]",
                            -expires=>'+1d',
                            -path=>'/');
print $cgimodul->header(-cookie=>$create_cookie);
print $cgimodul->redirect("http://www.google.de");

Ergebnis ist die Ausgabe von
Status: 302 Moved Location: http://www.google.de
anstatt die Weiterleitung zu google.de.

Cookie anlegen klappt problemfrei. Die Weiterleitung klappt auch, wenn ich die cookie-geschichte auskommentieren.

Hat jemand einen Tipp, wie ich das hinbekomme?
Danke.

ciao
Johann

  1. Hallo.

    Ich möchte einen Cookie anlegen und danach sofort auf eine Website weiterleiten.

    Cookie anlegen klappt problemfrei. Die Weiterleitung klappt auch, wenn ich die cookie-geschichte auskommentieren.

    Hat jemand einen Tipp, wie ich das hinbekomme?

    Sowohl die Funktion header() als auch die Funktion redirect() erzeugen je einen HTTP Header. Sobald du den Rückgabewert einer dieser Funktionen ausgibst, hast du den HTTP Header gesendet und alle weiteren Ausgaben werden vom Browser als Inhalt gewertet.

    D. h. dein Aufruf von header() sendet, zusammen mit deinem Cookie, einen HTTP Header mit Status '200 OK' und MIME-Typ 'text/html'. Der Aufruf von redirect() erzeugt dann zwar einen zweiten Header für die Weiterleitung, dieser wird vom Browser aber als Inhaltsteil verstanden, weil der Header bereits mit der ersten Ausgabe abgeschlossen wurde.

    Folglich müssen der Cookie und die Aufforderung zur Weiterleitung zusammen als ein Header gesendet werden, und das geht wie folgt:

    use CGI qw(:cgi);
        print header( -status   => '302 Found',
                      -location => 'http://www.google.de/',
                      -cookie   => cookie(-name => 'my_cookie', -value => 'my_value'),
                    );

    Grüße.