Globales Session Management

Zend_Session_SaveHandler_DbTable

Das Basis Setup für Zend_Session_SaveHandler_DbTable muß zumindest vier Spalten haben, die wie folgt im Config Array oder Zend_Config Objekt beschrieben werden: primary, ist der Primary-Key und standardmäßig nur die SessionID welche standardmäßig ein String der Länge 32 ist; modified, ist der Unix-Timestamp des Datums der letzten Änderung; lifetime, ist die Lebenszeit der Session (modified + lifetime > time();); und data, sind die serialisierten Daten die in der Session gespeichert werden.

Example #1 Basis Setup

  1. CREATE TABLE `session` (
  2.   `id` char(32),
  3.   `modified` int,
  4.   `lifetime` int,
  5.   `data` text,
  6.   PRIMARY KEY (`id`)
  7. );
  1. // Datenbank Verbindung vorbereiten
  2. $db = Zend_Db::factory('Pdo_Mysql', array(
  3.     'host'     =>'example.com',
  4.     'username' => 'dbuser',
  5.     'password' => '******',
  6.     'dbname'   => 'dbname'
  7. ));
  8.  
  9. // Entweder den Standardadapter Zend_Db_Table setzen
  10. // oder eine DB-Verbindung direkt an den save Handler $config übergeben
  11. Zend_Db_Table_Abstract::setDefaultAdapter($db);
  12. $config = array(
  13.     'name'           => 'session',
  14.     'primary'        => 'id',
  15.     'modifiedColumn' => 'modified',
  16.     'dataColumn'     => 'data',
  17.     'lifetimeColumn' => 'lifetime'
  18. );
  19.  
  20. // Erstellen der Zend_Session_SaveHandler_DbTable und
  21. // Setzen des save Handlers für Zend_Session
  22. Zend_Session::setSaveHandler(new Zend_Session_SaveHandler_DbTable($config));
  23.  
  24. // Session starten
  25. Zend_Session::start();
  26.  
  27. // Jetzt kann Zend_Session wie sonst verwendet werden

Man kann auch mehrere Spalten im Primarykey für Zend_Session_SaveHandler_DbTable verwenden.

Example #2 Mehr-Spalten Primary-Keys verwenden

  1. CREATE TABLE `session` (
  2.     `session_id` char(32) NOT NULL,
  3.     `save_path` varchar(32) NOT NULL,
  4.     `name` varchar(32) NOT NULL DEFAULT '',
  5.     `modified` int,
  6.     `lifetime` int,
  7.     `session_data` text,
  8.     PRIMARY KEY (`Session_ID`, `save_path`, `name`)
  9. );
  1. // Die DB Verbindung wie vorher einrichten
  2. // BEACHTE: Diese Config wird auch an Zend_Db_Table übergeben sodas
  3. // spezielles für die Tabelle genauso in die Config gegeben werden kann
  4. $config = array(
  5.     'name'              => 'session', // Tabellenname von Zend_Db_Table
  6.     'primary'           => array(
  7.         'session_id',   // Die SessionID von PHP
  8.         'save_path',    // session.save_path
  9.         'name',         // Session Name
  10.     ),
  11.     'primaryAssignment' => array(
  12.         // Man muß dem Save-Handler mitteilen welche Spalten man als
  13.         // Primary-Key verwendet. DIE REIHENFOLGE IST WICHITG
  14.         'sessionId', // Erste Spalte des Primary-Keys ist die sessionID
  15.         'sessionSavePath', // Zweite Spalte des Primary-Keys ist der save-path
  16.         'sessionName', // Dritte Spalte des Primary-Keys ist der Session Name
  17.     ),
  18.     'modifiedColumn' => 'modified', // Zeit nach der die Session abläuft
  19.     'dataColumn'     => 'session_data', // Serialisierte Daten
  20.     'lifetimeColumn' => 'lifetime', // Lebensende für einen speziellen Eintrag
  21. );
  22.  
  23. // Zend_Session mitteilen das der Save Handler verwendet werden soll
  24. Zend_Session::setSaveHandler(new Zend_Session_SaveHandler_DbTable($config));
  25.  
  26. // Session starten
  27. Zend_Session::start();
  28.  
  29. // Zend_Session wie normal verwenden

Globales Session Management