|
|
<?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'); |
|
|
} |
|
|
} |
|
|
|