Mike: Sessions in mySQL Datenbank speichern

Hallo,

kann mir jemand sagen wie ich Sessions (Variablen) anstatt auf
dem Serverfilesystem in einer mySQL Datenbank speichern kann?

Gibt es dafür schon fertige Funktionen?

Grüße
Mike

  1. Moin,

    kann mir jemand sagen wie ich Sessions (Variablen) anstatt auf
    dem Serverfilesystem in einer mySQL Datenbank speichern kann?

    wüßte nicht, daß es sowas fertig gibt. Was ich tun würde, wäre in etwa folgendes, PHP vorausgesetzt:

    bei Anmeldung die IP des Users auslesen
    Name und Passwort vergleichen
    Usernamen, IP und Timestamp in die DB schreiben
    Username und IP von jeder Seíte auf die nächste mitgeben
    bei jedem weiteren Seitenaufruf checken, ob die IP und der Username in der DB vorhanden sind
    wenn länger als x Minuten kein Klick kam die Session deaktivieren (über ein zusätzliches Feld in der DB)
    den Eintrag nach einer bestimmten Anzahl von Minuten perse dektivieren oder besser löschen

    Hat aber Nachteile:
    hinter einer IP können sich mehrere User verstecken (Surfen über Proxy)
    wenn der User sich nicht abmeldet wird die Session deswegen noch nicht inaktiviert, könnte also von einem anderen User unter der gleichen IP übernommen werden
    ...

    Ich würde es so nicht machen, aber es ginge wenn es sein müßte...

    --
    Greetz,
    Andreas

    1. Hallo,

      bei Anmeldung die IP des Users auslesen

      Du mußt ja nicht die IP nehmen, Du könntest Dir ja selbst eine SessionID erzeugen. Wir haben ein solches Konstrukt selbst schon mal in die Praxis umgesetzt. Wobei hinzuzufügen ist, daß der Traffic nicht sonderlich hoch ist. Wir haben 2 Tabellen "session" und "sessionvalue"

      tabelle session:
      pk_session (Primärschlüssel)
      session_id
      timeout

      tabelle sessionvalue:
      pk_sessionvalue (Primärschlüssel)
      fk_session (Fremdschlüssel auf Session)
      varname
      vartype
      varvalue

      Die SessionID nach irgendeinem Zufallsmechanismus erzeugen, und einen Timeout definieren z.B. Now+15 min. Bei jedem Zugriff des Users wird zuerst der Timeout erneuert, sofern er noch nicht abgelaufen ist. Zum Anfang werden immer alle DS mit abgelaufenen Session gelöscht. Mit einem Join können allle notwendigen Daten geholt werden. Diese waren nicht komplex, keine Felder oder Objekte.

      Über Problem hinsichtlich Performance ist mir nichts zu Ohren gekommen. War eine Sache für einen Kunden.

      HTH

      Gruß Frank

  2. Hallo,

    kann mir jemand sagen wie ich Sessions (Variablen) anstatt auf
    dem Serverfilesystem in einer mySQL Datenbank speichern kann?

    Gibt es dafür schon fertige Funktionen?

    Jepp - sogar mit Tutorial: http://phpbuilder.com/columns/ying20000602.php3?page=1

    Grüße,

    Christian