全局会话管理

Zend_Session_SaveHandler_DbTable

The basic setup for Zend_Session_SaveHandler_DbTable must at least have four columns, denoted in the config array or Zend_Config object: primary, which is the primary key and defaults to just the session id which by default is a string of length 32; modified, which is the unix timestamp of the last modified date; lifetime, which is the lifetime of the session (modified + lifetime > time();); and data, which is the serialized data stored in the session

Example #1 Basic Setup

  1. CREATE TABLE `session` (
  2.   `id` char(32),
  3.   `modified` int,
  4.   `lifetime` int,
  5.   `data` text,
  6.   PRIMARY KEY (`id`)
  7. );
  1. //get your database connection ready
  2. $db = Zend_Db::factory('Pdo_Mysql', array(
  3.     'host'        =>'example.com',
  4.     'username'    => 'dbuser',
  5.     'password'    => '******',
  6.     'dbname'    => 'dbname'
  7. ));
  8.  
  9. //you can either set the Zend_Db_Table default adapter
  10. //or you can pass the db connection straight to the save handler $config
  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. //create your Zend_Session_SaveHandler_DbTable and
  21. //set the save handler for Zend_Session
  22. Zend_Session::setSaveHandler(new Zend_Session_SaveHandler_DbTable($config));
  23.  
  24. //start your session!
  25. Zend_Session::start();
  26.  
  27. //now you can use Zend_Session like any other time

You can also use Multiple Columns in your primary key for Zend_Session_SaveHandler_DbTable.

Example #2 Using a Multi-Column Primary Key

  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. //setup your DB connection like before
  2. //NOTE: this config is also passed to Zend_Db_Table so anything specific
  3. //to the table can be put in the config as well
  4. $config = array(
  5.     'name'              => 'session', //table name as per Zend_Db_Table
  6.     'primary'           => array(
  7.         'session_id',   //the sessionID given by PHP
  8.         'save_path',    //session.save_path
  9.         'name',         //session name
  10.     ),
  11.     'primaryAssignment' => array(
  12.         //you must tell the save handler which columns you
  13.         //are using as the primary key. ORDER IS IMPORTANT
  14.         'sessionId', //first column of the primary key is of the sessionID
  15.         'sessionSavePath', //second column of the primary key is the save path
  16.         'sessionName', //third column of the primary key is the session name
  17.     ),
  18.     'modifiedColumn'    => 'modified',     //time the session should expire
  19.     'dataColumn'        => 'session_data', //serialized data
  20.     'lifetimeColumn'    => 'lifetime',     //end of life for a specific record
  21. );
  22.  
  23. //Tell Zend_Session to use your Save Handler
  24. Zend_Session::setSaveHandler(new Zend_Session_SaveHandler_DbTable($config));
  25.  
  26. //start your session
  27. Zend_Session::start();
  28.  
  29. //use Zend_Session as normal

全局会话管理