Oliver Antosch: Perl und Cookies

Hallo,

um einen Autologin zu realisieren, verwende ich cookies. Um gleich zu testen ob das
Cookie erfolgreich gesetzt worden ist, überprüfe ich dies gleich. Allerdings meldet
Perl fälschlicherweise das es nicht gesetzt worden ist. Desweiteren würde mich interessieren
wie man nicht ein absolutes Verfallsdatum setzt, sondern eher im Stile ab-jetzt-noch-6-monate-gültig.

print "Set-Cookie: $rec{ID}=$encrypted_PW; path=/; expires=Wednesday, 31-Dec-99 23:59:59 GMT\n";

if ($ENV{'HTTP_COOKIE'}) {

&html_set_autologin_success;
&auth_logging('set autologin succeeds',$rec{Spitzname}) if ($auth_logging);

}  

else  {

&html_set_autologin_failure;
&auth_logging('set autologin fails',$rec{Spitzname}) if ($auth_logging);

}

  1. hi!

    um einen Autologin zu realisieren, verwende ich cookies. Um gleich zu testen ob das
    Cookie erfolgreich gesetzt worden ist, überprüfe ich dies gleich. Allerdings meldet
    Perl fälschlicherweise das es nicht gesetzt worden ist.

    Du schreibst in den HTTP-Header an den Browser, dass ein Cookie gesetzt werden soll und überprüfst dann, ob es schon im HTTP-Header vom Browser steht. Das kann aber noch gar nicht sein, weil der Browser vor Ende des Skripts deinen HTTP-Header und damit den Befehl, einen Cookie zu setzen, gar nicht erhalten hat. Das zu Überprüfen ist also erst beim nächsten Aufruf des Skripts möglich.

    Desweiteren würde mich interessieren wie man nicht ein absolutes Verfallsdatum setzt,
    sondern eher im Stile ab-jetzt-noch-6-monate-gültig.

    Das funktioniert nicht.

    bye, Frank!

    1. Hi,

      Desweiteren würde mich interessieren wie man nicht ein absolutes Verfallsdatum setzt,
      sondern eher im Stile ab-jetzt-noch-6-monate-gültig.

      Das funktioniert nicht.

      doch, man muß nur das Datum um sechs Monate vorzählen und den String dann entsprechend umwandeln. Konkret habe ich jetzt keine Idee, aber eine Beschäftigung mit localtime() und timelocal() sowie time sollte zu einer Lösung führen. Bedenke, bei Perl ist eine Anleitung mitgeliefert :-)

      Cheatah

      1. hi!

        Desweiteren würde mich interessieren wie man nicht ein absolutes Verfallsdatum setzt,
        sondern eher im Stile ab-jetzt-noch-6-monate-gültig.
        Das funktioniert nicht.
        doch, man muß nur das Datum um sechs Monate vorzählen und den String dann
        entsprechend umwandeln.

        Natürlich kann ich in Perl zum Datum 6 Monate dazurechnen. Es ging aber wohl darum, ein absolutes Datum anzugeben. Das geht aber nicht.

        bye, Frank!

        1. Hi Frank,

          Desweiteren würde mich interessieren wie man nicht ein absolutes Verfallsdatum setzt,
          sondern eher im Stile ab-jetzt-noch-6-monate-gültig.
          Das funktioniert nicht.
          doch, man muß nur das Datum um sechs Monate vorzählen und den String dann
          entsprechend umwandeln.

          Natürlich kann ich in Perl zum Datum 6 Monate dazurechnen. Es ging aber wohl darum, ein absolutes Datum anzugeben. Das geht aber nicht.

          Moment, jetzt verstehe ich gerade gar nichts mehr. Er schreibt: "...wie man _nicht_ ein absolutes Verfallsdatum setzt...", sondern ab dem aktuellen Zeitpunkt sechs Monate Gültigkeit. Da man _immer_ ein absolutes Datum angeben muß, muß man dieses relativ zum aktuellen berechnen. Jetzt sagst Du, es ginge darum, ein absolutes Datum anzugeben (Widerspruch zum Zitat), was aber nicht geht (Widerspruch zu den Tatsachen). Da ich nicht annehme, daß Du Blödsinn erzählt hast (wäre was neues bei Dir *g*), muß ich irgendwo einen Denkfehler machen...

          Kannst Du mich bitte aufklären, wo der liegt?

          Cheatah

          1. hi!

            Kannst Du mich bitte aufklären, wo der liegt?

            Sorry, ich habe mich verschrieben. Ich meinte natürlich ein relatives Datum.

            bye, Frank!

            1. Hi,

              Kannst Du mich bitte aufklären, wo der liegt?

              Sorry, ich habe mich verschrieben. Ich meinte natürlich ein relatives Datum.

              ach so, also ein "expires=in 6 months". Ne, da hast Du recht, das geht nicht.

              Cheatah

  2. Hi,

    So müßte es geh'n:

    $t = time();
    $t = $t + 1000 * 60 * 60 * 24 * 360;  
      #Milisekunden für 6 Monate
    $s = scalar gmtime($t);

    Wird gmtime() in mit einem Skalar benutzt (hier $s),
    so gibt es die übergebene Zeit (in Milisekunden seit 1970) als GMT - Zeit zurück. (Der Aufruf der Funktion scalar verdeutlicht das, kann jedoch auch weggelassen werden wenn das Ergebnis einem Skalar zugewiesen wird.

    Sag mir bitte bescheid, ob das geklappt hat.

    Grüße
      fredy

    1. Hi,

      nur 'ne kleine Anmerkung:

      $t = time();
      $t = $t + 1000 * 60 * 60 * 24 * 360;  
        #Milisekunden für 6 Monate

      Für 6 Monate mußt Du *180 nehmen anstatt *360, und es sind nur ca. 6 Monate. In Perl solltest Du zudem das 1000* weglassen, weil Perl in Sekunden rechnet, nicht in Millisekunden... Ansonsten müßte es aber klappen.

      Cheatah