Exemplo n.º 1
0
 /**
  * セッションスタート
  *
  * @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']));
 }