Martin: Session-IDs entfernen

Hallo,
also, grundsätzlich hab ich verstanden, wie man auch mit PERL und ohne Verwendung externer Module Session-IDs benutzen kann.
Ich verstehe nur noch nicht so ganz, wie ich das mit dem Timeout hinbekomme.
Mal angenommen, ich erzeuge Dateien mit einer generierten Session-ID als Dateiname. Dann speichere ich eine Timeout-Zeit in dieser Datei (z.B. aktuelle Zeit plus 10 Minuten). Diese Zeit kann ich bei jedem Aufruf durch den Benutzer aktualisieren. Verlässt der Benutzer aber irgendwann die Seite, dann möchte ich natürlich, dass die Session-Datei gelöscht wird.
OK, ich könnte das über einen Logout-Link machen, weiß aber aus eigener Erfahrung, dass man das oft vergisst und meistens einfach den Browser schließt. Wie kann ich nun elegant dafür sorgen, dass abgelaufene Session-Dateien gelöscht werden?

  1. Hi,

    also, grundsätzlich hab ich verstanden, wie man auch mit PERL und ohne Verwendung externer Module Session-IDs benutzen kann.

    Wie generierst du die Session-id's? Wenn du einen zu einfachen Algorythmus benutzt, ist das ungünstig, weil dann der Schutzt gering ist, weil er zu leicht erraten werden kann.

    Mal angenommen, ich erzeuge Dateien mit einer generierten Session-ID als Dateiname.

    IMHO so alleine ungünstig, da du so nicht so gut schauen kannst, wie alt die Session Id ist. Ich würde eher in einer Datei alle Session Id's notieren, und dann diese Datei regelmäßig nach ungültigen, weil zu alten, Session Ids durchsuchen. Für die einzelnen Sessions kannst du dann immer noch einzelne Dateien oder einen Datenbank benutzten.

    »»Dann speichere ich eine Timeout-Zeit in dieser Datei (z.B. aktuelle Zeit plus 10 Minuten). Diese Zeit kann ich bei jedem Aufruf durch den Benutzer aktualisieren. Verlässt der Benutzer aber irgendwann die Seite, dann möchte ich natürlich, dass die Session-Datei gelöscht wird.
    Deshalb nicht die Ausszeit der Session in der Session Datei speichern, sondern alle zusammen in einer anderen Datei.

    OK, ich könnte das über einen Logout-Link machen, weiß aber aus eigener Erfahrung, dass man das oft vergisst und meistens einfach den Browser schließt. Wie kann ich nun elegant dafür sorgen, dass abgelaufene Session-Dateien gelöscht werden?

    Volkommen richtig, sich nie auf den User verlassen.

    mfg Andres Freund
    ^^^^^^
    Verabschiedung ;-)

    1. Wie generierst du die Session-id's? Wenn du einen zu einfachen Algorythmus benutzt, ist das ungünstig, weil dann der Schutzt gering ist, weil er zu leicht erraten werden kann.

      Ich denke, für meine Zwecke sollte eine Kombination aus einem Timestamp (time()) und einem 15 stelligem Zufallscode aus Buchstaben und Ziffern genügen.

      IMHO so alleine ungünstig, da du so nicht so gut schauen kannst, wie alt die Session Id ist.

      Wieso denn nicht. Warum nicht einfach die Dateiattribute (Schreibzugriff) abfragen um an das Alter der Datei zu kommen. Und mit utime kann ich dann auch die SessionID updaten.

      Ich würde eher in einer Datei alle Session Id's notieren, und dann diese Datei regelmäßig nach ungültigen, weil zu alten, Session Ids durchsuchen. Für die einzelnen Sessions kannst du dann immer noch einzelne Dateien oder einen Datenbank benutzten.

      Ja das geht, aber das regelmäßige Durchsuchen ist halt noch das Problem. Inzwischen weiß ich auch, dass mein Webspace-Provider mir keine crontab bereitstellt.

      Deshalb nicht die Ausszeit der Session in der Session Datei speichern, sondern alle zusammen in einer anderen Datei.

      Ich hab das Gefühl, dadurch würde die Sache unnötig kompliziert.

    2. Wie generierst du die Session-id's? Wenn du einen zu einfachen Algorythmus benutzt, ist das ungünstig, weil dann der Schutzt gering ist, weil er zu leicht erraten werden kann.

      z.B.:
      do { $user_id = pack('c*',map(rand(25)+97,1..20)); } while(-e "$tempdir/$user_id");

      Dann rate mal... ;P

      IMHO so alleine ungünstig, da du so nicht so gut schauen kannst, wie alt die Session Id ist. Ich würde eher in einer Datei alle Session Id's notieren, und dann diese Datei regelmäßig nach ungültigen, weil zu alten, Session Ids durchsuchen. Für die einzelnen Sessions kannst du dann immer noch einzelne Dateien oder einen Datenbank benutzten.

      Ack... geschmackssache...

      saludos
      C14L

  2. Hallo Martin,

    lasse z. B. stündlich einen CRON-Job laufen, der nach alten Session-Dateien sucht un diese dann löscht.

    Gruß

    Eidgenosse