示例#1
0
 public static function setup()
 {
     $session_conf = (array) \Gini\Config::get('system.session');
     $cookie_params = (array) $session_conf['cookie'];
     $session_name = $session_conf['name'] ?: 'gini-session';
     $host_hash = sha1($cookie_params['domain'] ?: $_SERVER['HTTP_HOST']);
     ini_set('session.name', $session_name . '_' . $host_hash);
     if ($session_conf['save_handler']) {
         $handler_name = $session_conf['save_handler'];
         // save_handler = internal/files
         if (0 == strncmp($handler_name, 'internal/', 9)) {
             ini_set('session.save_handler', substr($handler_name, 9));
         } else {
             // save_handler = Database
             $class = '\\Gini\\Session\\' . $handler_name;
             self::$_handler = \Gini\IoC::construct($class);
             session_set_save_handler(self::$_handler, false);
         }
     }
     if ($session_conf['save_path']) {
         session_save_path($session_conf['save_path']);
     }
     if (PHP_SAPI == 'cli') {
         ini_set('session.use_cookies', 0);
         // TODO: find a better way to save and load session id
         $idPath = self::_idPath();
         if (file_exists($idPath)) {
             session_id(file_get_contents($idPath));
         }
     }
     session_set_cookie_params($cookie_params['lifetime'], $cookie_params['path'], $cookie_params['domain']);
     if (isset($_POST['gini-session'])) {
         session_id($_POST['gini-session']);
     } elseif (isset($_SERVER['HTTP_X_GINI_SESSION'])) {
         session_id($_SERVER['HTTP_X_GINI_SESSION']);
     }
     set_error_handler(function () {
     }, E_ALL ^ E_NOTICE);
     session_start();
     restore_error_handler();
     if (!ini_get('session.use_cookies')) {
         // close session immediately to avoid deadlock
         session_write_close();
     }
     $now = time();
     foreach ((array) $_SESSION['@TIMEOUT'] as $token => $timeout) {
         if ($now > $timeout) {
             unset($_SESSION[$token]);
             unset($_SESSION['@TIMEOUT'][$token]);
         }
     }
 }
示例#2
0
文件: Session.php 项目: iamfat/gini
 public static function unlock()
 {
     session_commit();
     if (self::$_lock) {
         self::$_lock->unlock();
         self::$_lock = null;
     }
     session_start();
 }