muenzchen: Herausfinden wenn Session nicht mehr existiert?

Hallo!

Ist es möglich herauszufinden ob eine Session noch existiert oder nicht?

Ich will nämlich die Sessions in eine Datenbank eintragen solange sie existieren, wenn sie gelöscht werden (also der Benutzer die Seite verlässt) soll sie auch aus der Datenbank gelöscht werden.

So möchte ich ausgeben wer gerade online ist und wer nicht.

Ist sowas möglich oder habe ich mich da ziemlich verdacht?

MfG, muenzchen

  1. Ist es möglich herauszufinden ob eine Session noch existiert oder nicht?

    Jein. Die Sessions werden in einem Verzeichnis gespeichert, da könntest Du nachschauen, aber..

    Ich will nämlich die Sessions in eine Datenbank eintragen solange sie existieren, wenn sie gelöscht werden (also der Benutzer die Seite verlässt) soll sie auch aus der Datenbank gelöscht werden.

    ..das geht nicht. Der Browser meldet sich nicht ab, wenn er eine andere Seite aufruft. Er meldet sich auch nicht, wenn der den Keks, in dem er die Session-ID speichert, löscht.
    Von daher wirst Du nicht automatisch mitbekommen, ob jemand Deine Seiten verlässt oder wenn die Session verfällt (Ausnahme: serverseitiger Verfall, siehe oben). Die einzige und im übrigen bei Sessions auch durchaus angebrachte Möglichkeit ist eine "Abmelden"-Funktion auf Deinen Seiten.

    Gruß,
      soenk.e

    1. Hallo muenzchen,

      das excerpt hat Dir Soenke ja schon mitgeteilt.

      PHP hat einen GC = Garbage Collector. Der läuft aber nur unter Unix-Systemen und auch nur, wenn das Session-Verzeichnis nicht tiefer als zwei Verzeichnisebenen von / weg ist. Also /tmp/sessions/  ginge noch. Du solltest nämlich dringend die Sessiondateien aus dem tmp-Verzeichnis verlegen in eines, auf dass nur der der "PHP-Deamon" Zugriff hat. /tmp ist normalerweise durch alle User beschreib- und lesbar. Wie das die Provider machen, ist mir auch noch nicht klar.

      Gut: dieser GC sammelt wird immer beim Aufruf der session_start()-Funktion angestoßen und läuft dann, je nach eingestelltert Wahrscheinlichkeit, los um alle Sessions, die älter sind als session.gc_maxlifetime zu löschen. Das funktioniert, aber nicht wirklich gleich nach Ablauf der eingestellten Lebensdauer. Wir haben das ziemlich lange beobachtet und manchmal waren die Dateien erst am nächsten oder übernächsten Tag wieder verschwunden.

      Lösungsansatz:
      Lass die User über die Logindatei laufen...
      Trag die Sessionnummer in die Logindatei in den Userdatensatz ein
      Bei jedem Formularwechsel trägst Du den letzten Zugriff (Datetime) ein.

      Wenn Du jetzt Deine Datenbank abfragst und ein Zeitraster von ca. 5-15 Minuten einhältst, bekommst Du ungefähr ein Gefühl über die Anzahl der User.

      Das ist hier schon ganz oft diskutiert worden. Und es gibt auch viele Leute, die sowas niemals machen würden. *ggg* Aber ich selber halte in einem Forum, in dem die User eigenen Seiten haben, das für eine gute Einrichtung, wenn man sieht, ob derjenige vielleicht gerade "online" ist, wohl wissend, dass das für seinen Klick von vor 10 Minuten galt.

      Man kann natürlich auch eine "Onlineanzeige" in deie Seite einbauen. Dort könnten die neusten 20 Klicks angezeigt werden. Einziger Sinn dieses Frames ist aber, es über JavaScript oder meta-refresh aller 30 Sekunden beu aufzurufen, um auf der anderen Seite die Info auswerten zu können, ob der User (besser: sein PC) noch da ist.

      Liebe Grüße aus http://www.braunschweig.de

      Tom

      --
      Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
      1. Hallo Tom ;-)

        ...auf dass nur der der "PHP-Deamon" Zugriff hat.

        Freundchen, es gibt keinen "PHP-Dämon"(auch keine in Anführungszeichen ;-)) ), das hatten wir doch schon, bei CGI muß der Interpreter jedesmal gestartet werden und beim Modul ist es der _httpd_! Das hatten wir doch schonmal ;-)))

        Grüße
        Andreas

        1. Hallo mein Lieber,

          Hallo Tom ;-)

          ...auf dass nur der der "PHP-Deamon" Zugriff hat.
          Freundchen, es gibt keinen "PHP-Dämon"(auch keine in Anführungszeichen ;-)) ), das hatten wir doch schon, bei CGI muß der Interpreter jedesmal gestartet werden und beim Modul ist es der _httpd_! Das hatten wir doch schonmal ;-)))

          Wie willst Du sonst in einem Wort klar machen, dass es sich um den Teil des Apache handelt, der PHP-Scripte ausführt und NICHT um den Teil, der HTML-Seiten an den Client ausliefert? Hier ging es nur um die Abgrenzug von Zugriffsrechten und nicht um Haarspalterei.

          Liebe Grüße aus http://www.braunschweig.de

          Tom

          --
          Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
          1. Hallo!

            Wie willst Du sonst in einem Wort klar machen, dass es sich um den Teil des Apache handelt, der PHP-Scripte ausführt und NICHT um den Teil, der HTML-Seiten an den Client ausliefert? Hier ging es nur um die Abgrenzug von Zugriffsrechten und nicht um Haarspalterei.

            Ich weiß doch das Du es weißt ;-)
            Aber ich persönlcih verstehe es besser wenn ich von wegen Abgrenzung klarmache das es ja der httpd ist der da was machen soll, aber das ist Geschmackssache.

            Grüße
            Andreas

            1. Hi Andreas,

              wenn wir so weiter machen, bekommen wir bestimmt bald ne eigene TV-Show im RTL-Nachmittagsblock ...

              Liebe Grüße aus http://www.braunschweig.de

              Tom

              --
              Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
    2. Hm, das klingt ja ziemlich kompliziert.
      Ich frage mich wie die das beim Wbb gemacht haben?

      Doch sicher nicht auf diese Weise, oder?

      Mfg, muenzchen