Es klingt wie Sie die verdeckten Grundlagen haben. Wenn Sie das alles manuell tun, implementieren Sie effektiv nur Ihre eigene $_SESSION
, und nutzen nicht die Tatsache, dass es all das für Sie tun kann.
Wenn Sie eine Datenbank zum Behandeln einer Sitzung verwenden möchten, können Sie die Standardsitzungsbehandlung mit Ihrer eigenen überschreiben. Werfen Sie einen Blick auf session_set_save_handler(). Ich mache das in meinen Apps.
class SessionHandler
{
public function open($save_path, $session_name)
{
$this->sessionName = $session_name;
return(true);
}
public function close() {
//stuff
}
public function read($id) {
$expiretime = date("Y-m-d H:i:s",time() - $this->maxLifeTime);
$sql = "SELECT * FROM sessions where sessionid='".$this->db->escapeData($id)."' AND lastupdated>='".$expiretime."' LIMIT 1";
$result = $this->db->query($sql);
//etc.
}
//etc.
public function setAsSessionHandler()
{
session_set_save_handler(
array($this,'open'),
array($this,'close'),
array($this,'read'),
array($this,'write'),
array($this,'destroy'),
array($this,'gc')
);
}
}
$sessionHandler = new SessionHandler();
$sessionHandler->setAsSessionHandler();
können Sie haben alle Funktionen, die Sie gerade beschrieben, dass Sie sich dies durch den Einsatz implementiert haben, aber immer noch die Leistung von $ _SESSION es für Sie zu tun.
Wenn Sie beispielsweise eine IP-Prüfung hinzufügen möchten, um festzustellen, ob die Sitzung noch gültig ist, bevor Sie sie starten, können Sie dies als Teil der "Öffnen" -Funktion hinzufügen. Wenn Sie die Sitzungsdaten in zehn verschiedene Datenbanken schreiben möchten (nicht das, was Sie tun würden), können Sie dies in der Funktion "Schreiben" erreichen.
Diese Funktionen werden alle basierend darauf verwendet, wie Sie $ _SESSION verwenden, und indem Sie sie in eine einfache Klasse einfügen, können Sie verwalten, wie sie sehr effektiv funktioniert.
Sie werden sehen, dass die Sitzungs-ID ein Parameter ist, der an die Lese-/Schreib-/Löschfunktionen übergeben wird, und Sie werden dies weiterhin auf dieselbe Weise mit Ihrer GUID-Generierungsroutine verwalten.Sie könnten jedoch die GUID-Generation und die Prüfungen in diese Session Manager-Klasse stecken und einfach die open() -Funktion ausführen lassen. Zentralisiert, kein Muss, kein Aufhebens.
Sie erfinden das Rad mein Freund –