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