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.
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
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.
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.
.
4518300cookie-checkPHP-Sitzungen in der Datenbank [duplicate]yes
Warum nicht einfach das $_SESSION-Objekt serialisieren?
– Eric Herlitz
30. Juni ’12 um 7:44