Session: PHP soll Verbindung prüfen!

  • Hallihallo,
    ich hab mal ne Frage zu Sessions. Vielleicht kann mir jemand ja ne Idee geben.

    Ich habe eine Benutzerverwaltung auf Session-Basis erstellt, die alle eingeloggten User in meiner Datenbank mit SID und UserID speichert. Somit kann ich Bereiche für bestimmte User zugänglich machen oder eben nicht.
    Das funktioniert auch wunderbar. So nun habe ich mir noch eine Funktion gebaut, die anzeigt, wer gerade (oder vor Kurzem - das geht auch) online ist/war.
    Und hier stosse ich nun auf folgendes Problem:
    User die sich einloggen - also in der Datenbank verzeichnet sind- und sich nicht ausloggen, sondern den Browser schliessen, stehen weiterhin in der Datenbank und werden von meiner Funktion als online angezeigt. Logisch!

    Das ist aber nicht so toll und deshalb meine Frage: Kann man mit PHP die Existenz einer Session anhand ihrer Session-ID feststellen? Also, kann PHP prüfen, ob die Session-ID noch in Verwendung ist?

    Leider habsch dazu nicht so viel gefunden und bin auch eher pessimistisch, da Cookies ne clientseitige Geschichte sind. Aber vielleicht hat ja doch jemand ne Idee...

    "Carpe Diem" powered by positiv Feelings

  • Mach doch in die Tabellen einen Timestamp mit rein. Wie bei den Sessions auf dem Server kannste dann regelmäßig die Gültigkeit der SessId anhand der Zeitangabe prüfen. Wenn zu alt -> raus aus der Datenbank. Wenn der User noch aktiv ist, dann muss der Eintrag eben immer mit nem neuen Timestamp versehen werden. Loggt er sich korrekt aus ist das kein Problem, Timestamp mit löschen... ist eh an den Eintrag gekoppelt.
    Gruß
    webbie

  • Zitat von webbie

    Wenn zu alt -> raus aus der Datenbank. Wenn der User noch aktiv ist, dann muss der Eintrag eben immer mit nem neuen Timestamp versehen werden.

    Tja, genau diese Variante habe ich als erstes durchdacht und verworfen. Zum einen führt nicht jede Aktion zu einem DB-Zugriff, sondern
    es wir eine entsprechende Session-Variable verwendet. Zum anderen belastet der ständig neu zu schreibende Timestamp die
    Performance des Script's.

    Ich habe heut nochmal nachgedacht und bin auf folgenden Ansatz gekommen:
    Mit der Website wird eine ganz kleine JS-Routine gestartet, die alle 30sec. eine kurze Anfrage an den Server schickt. Sobald dieses
    "Päckchen" nicht mehr ankommt, wird die Session-ID aus der DB gelöscht. Als Datenpacket, welches übertragen wird, könnte
    bsp.weise die Sesssion-ID selbst dienen.

    Naja, so richtig gereift ist diese Idee noch nicht, aber somit sollte es möglich sein, bis auf Sekundenbasis den Loginstatus zu prüfen.

    Oder übersehe ich da was?

    "Carpe Diem" powered by positiv Feelings

  • Und noch ein Denkfehler, den ich eigentlich als Meldung von Dir erwartet hätte, Ronald:

    Wenn jemand kein JS verwendet, dann wird auch die Session nicht aus der DB gelöscht. Eigentlich logisch.

    Ich würde meine Site so aufbauen, dass ein User nicht drumherum kommt und der Timestamp bei wesentlichen zentralen Aktionen immer gesendet wird. Das funktioniert jedenfalls mit jedem Browser.
    Auf keinen Fall kannst Du Dich auf Javascript verlassen, Deine DB wird sonst irgendwann wegen Überfüllung geschlossen.
    Gruß
    webbie

  • Zitat von webbie

    Und noch ein Denkfehler, den ich eigentlich als Meldung von Dir erwartet hätte, Ronald:

    Wenn jemand kein JS verwendet, dann wird auch die Session nicht aus der DB gelöscht. Eigentlich logisch.

    So weit wollt ich nicht in die Details vordringen ;)

    G.a.d.M.

    Ronald

    z.Zt. fast 40° Fieber - shit Virus

  • Danke für eure Anregungen. Ich denke darüber nach.

    Aber!

    Zitat von Ronald


    Wenn der User den Browser schließt, dann ist kein JS mehr da, welches Anfragen an den Server senden könnte.


    Hier wurde meine Idee nicht verstanden. Sobald der Browser geschlossen wurde und die JS-Routine praktisch verendet ist,
    würde ja innerhalb der Vorgabezeit kein Päckchen der entspr. SID mehr den Server erreichen. Das wär doch toll, denn dann
    kann ich die SID aus der DB löschen.

    Zitat von webbie

    Wenn jemand kein JS verwendet, dann wird auch die Session nicht aus der DB gelöscht. Eigentlich logisch.


    Jupp, aber es handelt sich hier nur um den Admin-Zugang, der ohnehin JS voraussetzt.

    Aber wie gesagt. Danke für die Anregung und vielleicht bekomme ich es ja elegant gelöst. Dann melde ich mich hier wieder.

    "Carpe Diem" powered by positiv Feelings

  • Zitat von Torty


    Mit der Website wird eine ganz kleine JS-Routine gestartet, die alle 30sec. eine kurze Anfrage an den Server schickt. Sobald dieses
    "Päckchen" nicht mehr ankommt, wird die Session-ID aus der DB gelöscht. Als Datenpacket, welches übertragen wird, könnte
    bsp.weise die Sesssion-ID selbst dienen.

    Naja, so richtig gereift ist diese Idee noch nicht, aber somit sollte es möglich sein, bis auf Sekundenbasis den Loginstatus zu prüfen.

    Oder übersehe ich da was?

    Daraus entnehme ich NICHT, dass es sich nur um den Adminzugang handelt. Hier soll doch ganz deutlich der User sich ständig "melden" und sagen, dass er noch da ist. Und darum ging es: das geht nicht ohne Javascript.... Wenn das so nicht gemeint war, dann hast Du Dich vielleicht etwas mistverständlich ausgedrückt oder ich bin etwas begriffsstutzig ?)

    Gruß
    webbie

  • Beinahe hätt ich's doch glatt vergessen zu posten wie es nun gelöst wurde.

    THX webbie, denn nach genauerem Nachdenken kam ich drauf, dass nur einmal je Seitenaufbau der Admin-Status abgefragt wird.
    Genau hier aktualisiere ich also den Timestamp. So zu sagen als "letzteAktion". Und die eine Aktualisierung verursacht dann tatsächlich
    kaum eine Verzögerung.

    "Carpe Diem" powered by positiv Feelings