Make session handler pluggable
This commit is contained in:
parent
671b6d2eda
commit
8972ca8134
@ -15,6 +15,7 @@ class Session {
|
|||||||
|
|
||||||
private $handler = null;
|
private $handler = null;
|
||||||
private $session_started = false;
|
private $session_started = false;
|
||||||
|
private $custom_handler = false;
|
||||||
|
|
||||||
public function init() {
|
public function init() {
|
||||||
|
|
||||||
@ -28,13 +29,20 @@ class Session {
|
|||||||
* Set our session storage functions.
|
* Set our session storage functions.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$handler = new \Zotlabs\Web\SessionHandler();
|
$custom_handler = $this->custom_handler;
|
||||||
|
call_hook('custom_session_handler',$custom_handler);
|
||||||
|
$this->custom_handler = $custom_handler;
|
||||||
|
|
||||||
$this->handler = $handler;
|
|
||||||
|
|
||||||
$x = session_set_save_handler($handler,false);
|
if (!$this->custom_handler) {
|
||||||
if(! $x)
|
$handler = new \Zotlabs\Web\SessionHandler();
|
||||||
logger('Session save handler initialisation failed.',LOGGER_NORMAL,LOG_ERR);
|
|
||||||
|
$this->handler = $handler;
|
||||||
|
|
||||||
|
$x = session_set_save_handler($handler,false);
|
||||||
|
if(! $x)
|
||||||
|
logger('Session save handler initialisation failed.',LOGGER_NORMAL,LOG_ERR);
|
||||||
|
}
|
||||||
|
|
||||||
// Force cookies to be secure (https only) if this site is SSL enabled.
|
// Force cookies to be secure (https only) if this site is SSL enabled.
|
||||||
// Must be done before session_start().
|
// Must be done before session_start().
|
||||||
@ -86,14 +94,17 @@ class Session {
|
|||||||
|
|
||||||
$arr = session_get_cookie_params();
|
$arr = session_get_cookie_params();
|
||||||
|
|
||||||
if($this->handler && $this->session_started) {
|
if(($this->handler || $this->custom_handler) && $this->session_started) {
|
||||||
|
|
||||||
session_regenerate_id(true);
|
session_regenerate_id(true);
|
||||||
|
|
||||||
// force SessionHandler record creation with the new session_id
|
if (!$this->custom_handler) {
|
||||||
// which occurs as a side effect of read()
|
// force SessionHandler record creation with the new session_id
|
||||||
|
// which occurs as a side effect of read() since not all implementations
|
||||||
|
// of session_regenerate_id() call read().
|
||||||
|
|
||||||
$this->handler->read(session_id());
|
$this->handler->read(session_id());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
logger('no session handler');
|
logger('no session handler');
|
||||||
|
Reference in New Issue
Block a user