The Zend_Session_SaveHandler_DbTable component is tucked away in the incubator - I've had it running now for the last couple of weeks in combination with Zend_Auth and it's been working wonderfully. It's been used in conjunction with a series of linked microsites using different subdomains and this approach has been the most effective way for me to manage sessions smoothly across them all (especially if I decide to offload my database and sessions to a standalone server down the track).

First you set up your session table. Here's my MySQL dump (nearly identical to the example shown on the proposal page for Zend_Session_SaveHandler_DbTable):-

CREATE TABLE `session_list` (
  `id` varchar(32) collate utf8_unicode_ci NOT NULL,
  `save_path` varchar(32) collate utf8_unicode_ci NOT NULL,
  `name` varchar(32) collate utf8_unicode_ci NOT NULL default '',
  `modified` int(11) default NULL,
  `lifetime` int(11) default NULL,
  `data` text collate utf8_unicode_ci,
  PRIMARY KEY  (`id`,`save_path`,`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci PACK_KEYS=1;

Here's an example of my config.ini file:-

[all]

; -----------------------------------------------------------------------------
; Database connection
; -----------------------------------------------------------------------------
db.connection = pdo_mysql
db.host = localhost
db.username = myusername
db.password = mypassword
db.dbname = mydatabase

; -----------------------------------------------------------------------------
; Session
; -----------------------------------------------------------------------------
session.cookie_domain = mydomain.com.au
session.name = mycustomsessionname
session.remember_me_seconds = 864000
session.use_only_cookies = on

sessionhandler.name = session_list
sessionhandler.lifetime = 864000
sessionhandler.primary = id
sessionhandler.dataColumn = data
sessionhandler.modifiedColumn = modified
sessionhandler.lifetimeColumn = lifetime
sessionhandler.overrideLifetime = true

This is how I set it up in my bootstrap:-

// Set up database
$db = Zend_Db::factory($config->db->connection, $config->db->toArray());
Zend_Db_Table::setDefaultAdapter($db);

// Set session defaults
Zend_Session::setOptions($config->session->toArray());
Zend_Session::setSaveHandler(new Zend_Session_SaveHandler_DbTable($config->sessionhandler->toArray()));

And then continue to use Zend_Auth as you would normally.

Note that the storage engine for Zend_Auth bears no relation to the session at all - this will be a completely separate table (if you're using database authentication).

Hope this gets you on the way!

Cheerio

Hi,

i have a class that implements Zend_Session_SaveHandler_Interface to
save the session data inside a database. now i want this save handler to
be used to store the identity after authentication.

in the manual i found this:

   /By default, Zend_Auth provides persistent storage of the identity
from a successful authentication attempt using the PHP session. Upon
   a successful authentication attempt, Zend_Auth::authenticate()
   stores the identity from the authentication result into persistent
storage. Unless configured otherwise, Zend_Auth uses a storage class
   named Zend_Auth_Storage_Session, which, in turn, uses Zend_Session.
   A custom class may instead be used by providing an object that
   implements Zend_Auth_Storage_Interface to Zend_Auth::setStorage()./

What does that mean for the Zend_Session_SaveHandler implementation ? Is
Zend_Auth_Storage_Interface the same interface ??


I only found Zend_Session::setSaveHandler() but i have no idea how to
use this in combination with Zend_Auth (because Zend_Auth handles
Zend_Session internal).

I hope someone can help me with this.

best regards,
Truppe Steven

--

Simon Mundy | Director | PEPTOLAB

""" " "" """""" "" "" """"""" " "" """"" " """"" " """""" "" "
202/258 Flinders Lane | Melbourne | Victoria | Australia | 3000
Voice +61 (0) 3 9654 4324 | Mobile 0438 046 061 | Fax +61 (0) 3 9654 4124
http://www.peptolab.com

Reply via email to