speedy: CGI.pm macht zu schaffen

Hallo Forum,

ich bastle zur Zeit ein wenig mit dem CGI-Modul aus der Standardbibliothek von Perl.

Nun, ich habe ein Frameset in dem in den einzelnen SRCs jeweils ein Perlscript (hier: view.pl) gestartet wird. Das funktioniert ja schon ganz toll.

Wenn nun eine bestimmte Bedingung wahr ist, soll CGI.pm das Frameset aufloesen und zu einer anderen HTML-Seite redirecten. Ich wollte das so machen:

<perlcode>
#!perl.exe -w
use strict;
use CGI;

#...sonstiges von speedy prod. Wirrwarr

print redirect (-target -> '_top',
                -uri -> 'index.html');
</perlcode>

Das hatte dann lediglich ein premature end of script header zur Folge :-( Was hab ich falsch gemacht?

Ausserdem noch eine Frage zu Cookies:
Bei einem normalen Seitenabruf laeufts ja so ab, dass der Browser einen request sendet und auf die Antwort des Servers wartet. Wenn der Server seinen header geschickt hat, ist alles bis zum naechsten Browserrequest Text bzw. HTML.

Wie ist das mit einem Cookie? Kann der Server dieses mehrmals pro Sitzung abrufen? Sprich:

<perlcode>
my $cookie = cookie('mycookie');
</perlcode>

ausfuehren?

Viele Gruesse und danke
  speedy

  1. Hallo,

    print redirect (-target -> '_top',
                    -uri -> 'index.html');

    probiers mit '=>' statt '->' ;-)

    Wie ist das mit einem Cookie? Kann der Server dieses mehrmals pro Sitzung abrufen? Sprich:

    Cookies sind Bestandteil des Response-Headers (Also irgendeine Zeile _vor_ der ersten Leerzeile). Deshalb kannst Du, wenn Du lustig bist, jedesmal ein Cookie setzen, wenn eine Seite vom Client angefordert wird. Übrigens ist es egal, welchen Inhalt Du sendest, es muß nicht unbedingt HTML sein, da Cookies ja im HTTP-Header gesendet werden.

    Du kannst Auch mehrere Cookies senden, also mehrer 'Set-Cookie:'-Zeilen. Was allerdings der Browser damit macht weiß ich nicht.

    my $cookie = cookie('mycookie');

    Da kommt nichts dabei raus, schau in die Doku, wie man cookies generieren kann.

    Grüße
      Klaus

    1. Hi Klaus,

      my $cookie = cookie('mycookie');

      Da kommt nichts dabei raus, schau in die Doku, wie man cookies generieren kann.

      vielleicht liegt da ein Missverstaendnis vor. Mir gings um das Empfangen des Cookies _vom_ Browser _zum_ Server. Das Absetzen des Kekses funktioniert prima.

      :-)

      Viele Gruesse
      speedy

      PS: -> war ein Tippfehler, der 500er bleibt aber trotzdem!

      1. Hallo,

        vielleicht liegt da ein Missverstaendnis vor. Mir gings um das Empfangen des Cookies _vom_ Browser _zum_ Server. Das Absetzen des Kekses funktioniert prima.

        Die Backwaren werden dann vom Browser zum Server gesendet, wenn alle dafür notwendigen Bedingungen erfüllt sind. Also der Server oder dessen Domain ist richtig, der Pfad entspricht auch dem, was der Server beim Cookie-Setzen vorgegeben hat und das Ablaufdatum ist noch nicht erreicht. Vielleicht ist es gut zu wissen, daß 'www.xy.de' und 'WWW.XY.DE' und 'www.ab.de' nicht als der gleiche Server erkannt werden, auch wenn all diese Namen über DNS auf den gleichen Rechner verweisen. da werden beinhart die Strings miteinander verglichen, und wenn sie nicht gleich sind, dann gibts keine Naschereien.

        PS: -> war ein Tippfehler, der 500er bleibt aber trotzdem!

        Dann hats aber was anderes. perl -cw und testen ist da angesagt.

        Ich hoffe, jetzt ein bißchen Licht in die Angelegenheit gebracht zu haben

        Grüße
          Klaus

        1. Hi,

          Ich hoffe, jetzt ein bißchen Licht in die Angelegenheit gebracht zu haben

          nun, ein wenig heller ist‚s schon, aber ein Fraegelchen waere da noch offen:

          Kann ich einen Keks mehrmals hintereinander anfordern? Es scheint zu funktionieren, aber nicht zuverlaessig, da Cookie.pm ab und zu einen Fehler verursacht:
          "use of uninitialized value at line 66 in Cookie.pm"

          Komisch, oder?

          Viele Gruesse
          speedy

          1. Hallo,

            Kann ich einen Keks mehrmals hintereinander anfordern?

            Da wird nichts angefordert. Der Browser schickt sie unaufgefordert, wenn welche da sind, die den Bedingungen entsprechen.
            Und das Script bekommt sie in Form einer Environment-Variable vom Webserver übergeben. Sämtliche Perl-Module, die sich mit Cokkies auseinandersetzen, lesen die Cookies von dort.

            Es scheint zu funktionieren, aber nicht zuverlaessig, da Cookie.pm ab und zu einen Fehler verursacht:
            "use of uninitialized value at line 66 in Cookie.pm"

            Komisch, oder?

            Hast Du schon nachgesehen, was in besagter Zeile gemacht wird. Bitte die Version am Server checken. Es kann sein, daß dort eine ältere Version installiert ist, welche noch Bugs enthält oder Schwierigkeiten mit 'use strict' und der Option '-w' haben.

            Bei mir steht in der Zeile 66 des CGI::Cookie-Moduls (Version 1.16):
            s/\s*(.*?)\s*/$1/;

            Das kanns ja nicht gewesen sein.

            Grüße
              Klaus

            1. Hi,

              Da wird nichts angefordert. Der Browser schickt sie unaufgefordert, wenn welche da sind, die den Bedingungen entsprechen.

              Ach so. Gut zu wissen, das bringt schon mehr Licht ins dunkel!

              Hast Du schon nachgesehen, was in besagter Zeile gemacht wird

              Auf jeden Fall wird gesplittet. Der Fehler heisst auch "use of uni.... in split at line 66" , hab‚s aber auf einem anderen Rechner. Ich pruef mal die Version, aber ich hab die neueste Perl Distribution 5.6, wird also nich viel bringen.

              Danke erst mal fuer‚s Licht anknipsen in der NAschkammer!

              Gruesse
              speedy

  2. Hallo speedy,

    [...]

    print redirect (-target -> '_top',
                    -uri -> 'index.html');

    [...]

    Hast Du den Code auch mal mit -cw durch den "Compiler" laufen lassen? :-) Zwischen die einzelnen Elemente des ParameterArray gehört nämlich afaik => statt -> :-)
    Das könnte zumindest den 500er schon beheben (hoffe ich ;-).

    Ausserdem noch eine Frage zu Cookies:

    Da kann ich leider nix zu sagen, hab ich noch nicht mit gearbeitet.

    Gruß AlexBausW

    Please visit my SELFvisitingcard @ http://www.atomic-eggs.com/selfspezial/daten/150.html

    1. Hi,

      Hast Du den Code auch mal mit -cw durch den "Compiler" laufen lassen? :-) Zwischen die einzelnen Elemente des ParameterArray gehört nämlich afaik => statt -> :-)

      .,m4n590d345! Das is ein Tippfehler. Ich musste schon extra in die manpage schaun, um den richtigen Operator zu finden und dann schreib ich‚s trotzdem falsch...

      Viele Gruesse
        speedy