2010-06-01 5 views
7

Wie kann ich Sitzung in der Datenbanktabelle mit PHP und MySQL verwenden?set Sitzung in der Datenbank in PHP

+1

Können Sie uns ein wenig mehr Informationen geben? Was genau wirst du mit den Sitzungen machen? – 2ndkauboy

+2

Möglicherweise möchten Sie zuerst mit Google suchen. Einer der ersten Links, die es Ihnen zur Verfügung stellt, ist zum Beispiel: http://www.devshed.com/c/a/PHP/Storing-PHP-Sessions-in-Applications/Database/ – nico

+0

Normalerweise Sitzung gespeichert in temporären Dateien auf dem Server. Ich möchte die Sitzung in der Datenbanktabelle speichern. – shin

Antwort

18

Sie müssen ein Objekt wie so erstellen:

class SessionHandler 
{ 
    private static $lifetime = 0; 

    private function __construct() //object constructor 
    { 
     session_set_save_handler(
      array($this,'open'), 
      array($this,'close'), 
      array($this,'read'), 
      array($this,'write'), 
      array($this,'destroy'), 
      array($this,'gc') 
     ); 
    } 

    public function start($session_name = null) 
    { 
     session_start($session_name); //Start it here 
    } 

    public static function open() 
    { 
     //Connect to mysql, if already connected, check the connection state here. 

     return true; 
    } 

    public static function read($id) 
    { 
     //Get data from DB with id = $id; 
    } 

    public static function write($id, $data) 
    { 
     //insert data to DB, take note of serialize 
    } 

    public static function destroy($id) 
    { 
     //MySql delete sessions where ID = $id 
    } 

    public static function gc() 
    { 
     return true; 
    } 
    public static function close() 
    { 
     return true; 
    } 
    public function __destruct() 
    { 
     session_write_close(); 
    } 
} 

Dann vor session_start initiieren diese Klasse!

include 'classes/sessionHandlerDB.php'; 

$session = new SessionHandler(); 

$session->start('userbase'); 

$_SESSION['name'] = 'Robert Pitt'; //This is sent to SessionHandler::write('my_id','Robert Pitt') 
echo $_SESSION['name']; //This calls SessionHandler::read($id)//$id is Unique Identifier for that 

http://php.net/manual/en/function.session-set-save-handler.php

http://php.net/manual/en/function.serialize.php

+0

Können Sie mir sagen, wie kann ich diesen Code verwenden, um Sitzung zu setzen? Gibt es einen Unterschied zur normalen Sitzungseinstellung? – shin

+0

Basisch, wenn Sie $ _SESSION verwenden ... Dies wird den SessionHandler abfragen, was bedeutet, dass der Session-Handler der mittlere Mann ist, Daten speichert und Daten zurückgibt. Wenn Sie einen eigenen Handler anwenden, können Sie ihn beliebig speichern, DB, Datei usw. Das Ausführen dieser Anweisung teilt PHP mit, dass Sie diese Klasse für die Daten abfragen, wenn Sie die Sitzung verwenden. Solange Sie diese Datei einschließen und eine Instanz davon erstellen, wird alles, was Sie sonst noch tun, nicht akzeptiert. Die Speichermethode wird DB sein. Ich habe meinen Beitrag aktualisiert, bitte überprüfen Sie – RobertPitt

+0

Auch dieser Code ist reines Beispiel, ich würde es erweitern, um ein Speicherobjekt zu haben, so dass Sie die Aufrufe an db reduzieren, schauen Sie auch auf MemCached! – RobertPitt

1

Sie müssen session_set_save_handler verwenden, um benutzerdefinierte Funktionen zum Öffnen, Schließen, Lesen, Schreiben, Löschen und Bereinigen zu schreiben.

Verwandte Themen