CI_Session::__construct PHP Method

__construct() public method

Class constructor
public __construct ( array $params = [] ) : void
$params array Configuration parameters
return void
    public function __construct(array $params = array())
    {
        // No sessions under CLI
        if (is_cli()) {
            log_message('debug', 'Session: Initialization under CLI aborted.');
            return;
        } elseif ((bool) ini_get('session.auto_start')) {
            log_message('error', 'Session: session.auto_start is enabled in php.ini. Aborting.');
            return;
        } elseif (!empty($params['driver'])) {
            $this->_driver = $params['driver'];
            unset($params['driver']);
        } elseif ($driver = config_item('sess_driver')) {
            $this->_driver = $driver;
        } elseif (config_item('sess_use_database')) {
            $this->_driver = 'database';
        }
        $class = $this->_ci_load_classes($this->_driver);
        // Configuration ...
        $this->_configure($params);
        $class = new $class($this->_config);
        if ($class instanceof SessionHandlerInterface) {
            if (is_php('5.4')) {
                session_set_save_handler($class, TRUE);
            } else {
                session_set_save_handler(array($class, 'open'), array($class, 'close'), array($class, 'read'), array($class, 'write'), array($class, 'destroy'), array($class, 'gc'));
                register_shutdown_function('session_write_close');
            }
        } else {
            log_message('error', "Session: Driver '" . $this->_driver . "' doesn't implement SessionHandlerInterface. Aborting.");
            return;
        }
        // Sanitize the cookie, because apparently PHP doesn't do that for userspace handlers
        if (isset($_COOKIE[$this->_config['cookie_name']]) && (!is_string($_COOKIE[$this->_config['cookie_name']]) or !preg_match('/^[0-9a-f]{40}$/', $_COOKIE[$this->_config['cookie_name']]))) {
            unset($_COOKIE[$this->_config['cookie_name']]);
        }
        session_start();
        // Is session ID auto-regeneration configured? (ignoring ajax requests)
        if ((empty($_SERVER['HTTP_X_REQUESTED_WITH']) or strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) !== 'xmlhttprequest') && ($regenerate_time = config_item('sess_time_to_update')) > 0) {
            if (!isset($_SESSION['__ci_last_regenerate'])) {
                $_SESSION['__ci_last_regenerate'] = time();
            } elseif ($_SESSION['__ci_last_regenerate'] < time() - $regenerate_time) {
                $this->sess_regenerate((bool) config_item('sess_regenerate_destroy'));
            }
        } elseif (isset($_COOKIE[$this->_config['cookie_name']]) && $_COOKIE[$this->_config['cookie_name']] === session_id()) {
            setcookie($this->_config['cookie_name'], session_id(), empty($this->_config['cookie_lifetime']) ? 0 : time() + $this->_config['cookie_lifetime'], $this->_config['cookie_path'], $this->_config['cookie_domain'], $this->_config['cookie_secure'], TRUE);
        }
        $this->_ci_init_vars();
        log_message('info', "Session: Class initialized using '" . $this->_driver . "' driver.");
    }

Usage Example

示例#1
0
 public function __construct($params = array())
 {
     if (session_id() == '') {
         @session_start();
     }
     parent::__construct($params);
 }
All Usage Examples Of CI_Session::__construct