PHP-Sitzungen in der Datenbank [duplicate]

Lesezeit: 3 Minuten

Wie kann ich Sitzungen in der Datenbank speichern? Ich habe es mit diesem Code gemacht:

 function write ($session_id, $session_data)
// write session data to the database.
{
    if (!empty($this->fieldarray)) {
        if ($this->fieldarray['session_id'] != $session_id) {
            // user is starting a new session with previous data
            $this->fieldarray = array();
        } // if
    } // if

    if (empty($this->fieldarray)) {
        // create new record
        $array['session_id']   = $session_id;
        $array['date_created'] = getTimeStamp();
        $array['last_updated'] = getTimeStamp();
        $array['session_data'] = addslashes($session_data);
        $this->_dml_insertRecord($array);
    } else {
        // update existing record
        if (isset($_SESSION['logon_user_id'])) {
            $array['user_id']  = $_SESSION['logon_user_id'];
        } // if
        $array['last_updated'] = getTimeStamp();
        $array['session_data'] = addslashes($session_data);
        $this->_dml_updateRecord($array, $this->fieldarray);
    } // if

    return TRUE;

} // write

Aber wie soll ich es wie zuvor automatisch entfernen. Ich meine, wie man Sitzungen nach einer Zeitüberschreitung automatisch löscht?

  • Warum nicht einfach das $_SESSION-Objekt serialisieren?

    – Eric Herlitz

    30. Juni ’12 um 7:44

Ich musste mich vor einiger Zeit damit auseinandersetzen, und es gibt 2 Lösungen, von denen keine schön ist, aber hier geht es.

  1. In der Reihenfolge der Ereignisse (lose) überprüft Ihr Skript, ob eine Sitzungs-ID an den Server gesendet wurde, und prüft dann, ob sich diese Sitzung in Ihrer Datenbank befindet und ob die Sitzung abgelaufen ist. Sobald Sie die Verbindung zu Ihrer Sitzungsdatenbank hergestellt haben, können Sie eine DELETE-Abfrage für alle Datensätze ausführen, deren Ablaufdatum nach dem aktuellen Zeitstempel liegt. Suchen Sie dann nach der ID, die der Benutzer gerade gesendet hat. Auf diese Weise wird jedes Mal eine Bereinigung durchgeführt, wenn Nutzer Ihre Website verwenden

  2. Der nächste Weg, den Sie zusätzlich in Betracht ziehen könnten, besteht darin, einen CHRON-Job oder ein anderes automatisiertes Skript zu verwenden, das von Zeit zu Zeit ausgeführt wird, um abgelaufene Einträge aus Ihrer Sitzungstabelle zu entfernen. Dies ist eine gute Methode, wenn Ihre Website wenig und seltenen Verkehr erhält.

Eine Kombination von Methoden ist dies. Überprüfen Sie bei der Validierung Ihrer Sitzung in Ihrem Skript das Ablaufdatum, wenn die Sitzungsdaten gefunden werden. Wenn die ID gefunden wird, die Sitzung jedoch abgelaufen ist, löschen Sie die Sitzung und starten Sie eine neue. Wenn Sie dies auf diese Weise tun, müssen Sie nicht auf zu viele Probleme mit ID-Kollisionen oder viele Abfragen stoßen, die Ihren Server verlangsamen. Sie können Ihren chron-Job weiterhin jeden Tag am Ende ausführen, um eine vollständige Bereinigung durchzuführen.

Stellen Sie sicher, dass, wenn Ihr System über eine Art Abmeldeschaltfläche verfügt, das manuelle Abmelden das Löschen der Benutzersitzung auslöst.

PHP Sitzungen in der Datenbank duplicate
Andrés

Schau es dir an HTTP_Session2. Aus PEAR-Dokumenten:

HTTP_Session2 bietet zusätzliche Funktionen wie Datenbankspeicher für Sitzungsdaten mit dem DB- und MDB2-Paket. Außerdem werden neue Methoden wie isNew(), useCookies(), setExpire(), setIdle(), isExpired(), isIdled() und andere eingeführt.

Wenn Sie Ihren implementieren möchten, sehen Sie sich den Code in an MDB2.php in diesem Paket. Es enthält eine Garbage-Collection-Methode (gc), die in Kombination mit session_set_save_handler sollte den Trick machen.

.

451830cookie-checkPHP-Sitzungen in der Datenbank [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy