public static function startSessionWithParams($sessionName = '', $sessionDomain = '', $sessionId = '', $sessionType = 'file', $options = array()) { // Zc::dump($sessionName); // Zc::dump($sessionDomain); // Zc::dump($sessionId); // Zc::dump($sessionType); // Zc::dump($options); self::$log = Zc::getLog('session/manager.log'); if (!empty($sessionName)) { session_name($sessionName); } session_set_cookie_params(0, '/', !empty($sessionDomain) ? $sessionDomain : ''); if (!empty($sessionId)) { session_id($sessionId); } if ($sessionType === 'memcached' || $sessionType == 'db') { $handlerClassName = 'Zc' . ucfirst($sessionType) . 'SessionHandler'; self::$sessionHander = new $handlerClassName($options); session_set_save_handler(array(self::$sessionHander, 'open'), array(self::$sessionHander, 'close'), array(self::$sessionHander, 'read'), array(self::$sessionHander, 'write'), array(self::$sessionHander, 'destroy'), array(self::$sessionHander, 'gc')); register_shutdown_function('session_write_close'); } elseif ($sessionType === 'file') { if (!empty($options['session_save_path'])) { session_save_path($options['session_save_path']); } } else { throw new Exception("do not support session type {$sessionType}"); } $ret = session_start(); if (!$ret) { self::$log->monitor("{$sessionType} session start failed"); } self::$isStart = $ret; if (!isset($_SESSION['securityToken'])) { $_SESSION['securityToken'] = md5(uniqid(rand(), true)); } }