Search code examples
phpsessionsession-stateuserland

Has anyone created a PHP Session-like class in user code (not native)?


The native PHP Session functionality is great, but it's ultimately a singleton. There are times when you need to maintain state for multiple apps and in the scope of an already-started session (e.g. in an app framework). Technically one can stop/restart a session after changing session_name(), but this is impractical/impossible/unsafe within most apps. Using a shared session.save_path is also not an option if one app stores session data with a non-disk adapter.

There's no reason the functionality in native sessions can't be done in user code, so has anyone done this?

Update 1: CI_Session is indeed a userland implementation with some useful code, but it's highly coupled to CodeIgniter.

Update 2: Here's an API that would be great:

// setup
$saveHandler = new UserlandSession_SaveHandler_Files('5;/tmp');
$sess = new UserlandSession($saveHandler);
$sess->name('PHPSESSID2');
$sess->gc_maxlifetime = 86400;
$sess->setProxy($state); // passed by ref
// usage
$sess->start(); // stored string unserialized to $state
$state['foo'] = 'bar';
$sess->write_close(); // $state serialized to storage

Update 3: I've written an implementation for PHP5.3.


Solution

  • CodeIgniter has a session class that does not utilize native PHP sessions.