Example #1
0
 public static function start($sessionType, $config)
 {
     if (null !== self::$_sid) {
         return;
     }
     //判断参数里是否有sessid
     if (empty($config)) {
         $config = ZConfig::get('session');
     }
     if (!empty($config['adapter'])) {
         $sessionType = $config['adapter'];
     }
     self::$_config = $config;
     self::$_sessionType = $sessionType;
     $request = Request::getRequest();
     $sessionName = empty($config['session_name']) ? 'ZPHPSESSID' : $config['session_name'];
     $sid = null;
     if (!empty($request->cookie[$sessionName])) {
         $sid = $request->cookie[$sessionName];
     }
     if (!$sid && !empty($request->get[$sessionName])) {
         $sid = $request->get[$sessionName];
     }
     if (!$sid && !empty($request->post[$sessionName])) {
         $sid = $request->post[$sessionName];
     }
     if ($sid) {
         $handler = Factory::getInstance($sessionType, $config);
         $data = $handler->read($sid);
         if (!empty($data)) {
             $_SESSION = unserialize($data);
         } else {
             $_SESSION = array();
         }
     } else {
         $sid = sha1($request->header['user-agent'] . $request->server['remote_addr'] . uniqid(Request::getSocket()->worker_pid . '_'));
         $path = empty($config['path']) ? '/' : $config['path'];
         $domain = empty($config['domain']) ? '' : $config['domain'];
         $secure = empty($config['secure']) ? false : $config['secure'];
         $httponly = !isset($config['httponly']) ? true : $config['httponly'];
         $lifetime = 0;
         if (!empty($config['cache_expire'])) {
             $lifetime = time() + $config['cache_expire'] * 60;
         }
         Response::getResponse()->cookie($sessionName, $sid, $lifetime, $path, $domain, $secure, $httponly);
         $_SESSION = array();
     }
     self::$_sid = $sid;
 }