Registers session save handler as a PHP session handler.
To use internal PHP session save handlers, override this method using ini_set with session.save_handler and session.save_path e.g.
ini_set('session.save_handler', 'files'); ini_set('session.save_path', /tmp');
or pass in a NativeSessionHandler instance which configures session.save_handler in the constructor, for a template see NativeFileSessionHandler or use handlers in composer package drak/native-session
AbstractProxy|NativeSessionHandler|\SessionHandlerInterface|null $saveHandler:
\InvalidArgumentException
http://php.net/session-set-save-handler
http://php.net/sessionhandlerinterface
http://github.com/drak/NativeSession
public function setSaveHandler($saveHandler = null) {
if (!$saveHandler instanceof AbstractProxy && !$saveHandler instanceof NativeSessionHandler && !$saveHandler instanceof \SessionHandlerInterface && null !== $saveHandler) {
throw new \InvalidArgumentException('Must be instance of AbstractProxy or NativeSessionHandler; implement \\SessionHandlerInterface; or be null.');
}
// Wrap $saveHandler in proxy and prevent double wrapping of proxy
if (!$saveHandler instanceof AbstractProxy && $saveHandler instanceof \SessionHandlerInterface) {
$saveHandler = new SessionHandlerProxy($saveHandler);
}
elseif (!$saveHandler instanceof AbstractProxy) {
$saveHandler = version_compare(phpversion(), '5.4.0', '>=') ? new SessionHandlerProxy(new \SessionHandler()) : new NativeProxy();
}
$this->saveHandler = $saveHandler;
if ($this->saveHandler instanceof \SessionHandlerInterface) {
if (version_compare(phpversion(), '5.4.0', '>=')) {
session_set_save_handler($this->saveHandler, false);
}
else {
session_set_save_handler(array(
$this->saveHandler,
'open',
), array(
$this->saveHandler,
'close',
), array(
$this->saveHandler,
'read',
), array(
$this->saveHandler,
'write',
), array(
$this->saveHandler,
'destroy',
), array(
$this->saveHandler,
'gc',
));
}
}
}