/** * セッションスタート * * @return void */ private function _start() { static $hasStarted = false; if ($hasStarted !== false || $this->_config['adapter'] === self::ADAPTER_NONE) { return; } $hasStarted = true; $this->_setAdpator($this->_config); HTTP_Session2::start(null); // セッションを通じた固定トークン if (HTTP_Session2::isNew()) { BEAR::dependency('BEAR_Form_Token')->newSessionToken(); } // 有効期限 if (isset($this->_config['idle']) && $this->_config['idle']) { HTTP_Session2::setIdle($this->_config['idle']); // セッションの期限切れ if (HTTP_Session2::isIdle()) { if (isset($this->_config['callback']) && is_callable($this->_config['callback'])) { $method = $this->_config['callback'][1]; BEAR::dependency($this->_config['callback'][0], array())->{$method}(); } else { // コールバック指定がないとセッション破壊 HTTP_Session2::destroy(); } } else { HTTP_Session2::updateIdle(); } } // セッションを開始してから(=最初のアクセス)からセッションが切れる時間を指定 if (isset($this->_config['expire']) && $this->_config['expire']) { HTTP_Session2::setExpire($this->_config['expire'], false); if (HTTP_Session2::isExpired()) { if (isset($this->_config['expire_callback']) && is_callable($this->_config['expire_callback'])) { $method = $this->_config['expire_callback'][1]; BEAR::dependency($this->_config['expire_callback'][0], array())->{$method}(); } else { // コールバック指定がないとセッション破壊 HTTP_Session2::destroy(); } } } // GCが働くまでの時間 if (isset($this->_config['gc_max_lifetime']) && $this->_config['gc_max_lifetime']) { HTTP_Session2::setGcMaxLifeTime($this->_config['gc_max_lifetime']); } // セッションスタート $this->_log->log('Session Start', array('id' => session_id(), 'module' => session_module_name() . '/' . $this->_config['adapter'])); }