| <?php |
|
|
| namespace Kanboard\Core\Session; |
|
|
| use Kanboard\Core\Base; |
| use Symfony\Contracts\EventDispatcher\Event; |
|
|
| |
| |
| |
| |
| |
| |
| class SessionManager extends Base |
| { |
| |
| |
| |
| |
| |
| const EVENT_DESTROY = 'session.destroy'; |
|
|
| |
| |
| |
| |
| |
| |
| |
| public static function isOpen() |
| { |
| return session_id() !== ''; |
| } |
|
|
| |
| |
| |
| |
| |
| public function open() |
| { |
| if (SESSION_HANDLER === 'db') { |
| session_set_save_handler(new SessionHandler($this->db), true); |
| } |
|
|
| $this->configure(); |
|
|
| if (ini_get('session.auto_start') == 1) { |
| session_destroy(); |
| } |
|
|
| session_name('KB_SID'); |
| session_start(); |
| } |
|
|
| |
| |
| |
| |
| |
| public function close() |
| { |
| $this->dispatcher->dispatch(new Event(), self::EVENT_DESTROY); |
|
|
| |
| $params = session_get_cookie_params(); |
|
|
| setcookie( |
| session_name(), |
| '', |
| time() - 42000, |
| $params['path'], |
| $params['domain'], |
| $params['secure'], |
| $params['httponly'] |
| ); |
|
|
| session_unset(); |
| session_destroy(); |
| } |
|
|
| |
| |
| |
| |
| |
| private function configure() |
| { |
| |
| session_set_cookie_params( |
| SESSION_DURATION, |
| $this->helper->url->dir() ?: '/', |
| null, |
| $this->request->isHTTPS(), |
| true |
| ); |
|
|
| |
| ini_set('session.use_only_cookies', '1'); |
| ini_set('session.use_trans_sid', '0'); |
|
|
| |
| ini_set('session.use_strict_mode', '1'); |
|
|
| |
| ini_set('session.hash_function', '1'); |
| ini_set('session.hash_bits_per_character', 6); |
|
|
| |
| ini_set('session.entropy_file', '/dev/urandom'); |
| ini_set('session.entropy_length', '256'); |
| } |
| } |
|
|