array( 'addr' => 'vmdev-passport:11000', 'json' => true)); /** * SOAR * 支持1.0、1.2版本 * * @param boolen $isJump 当未登录时是否跳转 默认否 * @param array $fileds 获取数据的字段名 * @param string $version 版本,当前支持1.0、1.2版本 * * @return boolen|array */ public static function checkauth($isJump = false, $fileds = array('uuid','account'), $version = '1.0') { if ($version == '1.0') { return self::checkAuth_1_0($isJump, $fileds); } elseif ($version == '1.2') { return self::checkAuth_1_2($isJump, $fileds); } else { return 'version error'; } } /** * logout * 支持1.0、1.2版本 * * @param string $version 版本,当前支持1.0、1.2版本 * @return boolen */ public static function logout($version = '1.0') { if ($version == '1.0') { return self::logout_1_0(); } elseif ($version == '1.2') { return self::logout_1_2(); } else { return 'version error'; } } /** * soar 1.0版本 * * @param boolen $isJump * @param array $fileds * @return boolen|array */ private static function checkAuth_1_0($isJump = false, $fileds = array('uuid','account')) { // Check cookie if (! isset($_COOKIE[self::SID])) { //Kohana::log("error", __METHOD__ . ": cookie (" . self::SID . ") not set on line " . __LINE__); if ($isJump) { self::login(); } return false; } $sid = $_COOKIE[self::SID]; // Initialized session manager. require_once dirname(__FILE__) . '/../3rd/soar/1.0/soar.inc'; $soar = new soar(); $session = $soar->session(); $soar->close(); // Fetch session values. $session->setsid($sid); $values = $session->getkey($fileds); // Handle error. if (is_null($values)) { //Kohana::log("error", __METHOD__ . ": cookie(" . self::SID . ")=$sid not valid, err:" . $session->last_error . "on line " . __LINE__); if ($isJump) { self::login(); } return false; } $param = self::getParam($fileds, $values); $param[self::SID] = $_COOKIE[self::SID]; return $param; } /** * soar 1.2版本 * * @param boolen $isJump * @param array $fileds * @return boolen|array */ private static function checkAuth_1_2($isJump = false, $fileds = array('uuid','account')) { // Soar require_once dirname(__FILE__) . '/../3rd/soar/1.2/web.inc'; errlog::init("httpd", self::$errlog_location); if (! isset($_COOKIE[self::SID])) { errlog::add("%s|%s: cookie(%s) not set", basename(__FILE__), __METHOD__, self::SID); if ($isJump) { self::login(); } return false; } $sid = $_COOKIE[self::SID]; errlog::add("%s|%s: cookie(%s)=%s", basename(__FILE__), __METHOD__, self::SID, $sid); $svcenv = new svcenv(self::$svcenv['passport']); $session = $svcenv->session(); $session->setsid($sid); $res = $session->validate(); if ($res != true) { if ($isJump) { self::login(); } return false; } $user_info = array(self::SID=>$sid); foreach ($fileds as $key) { $vals = $session->getkey(array( $key)); if (is_null($vals)) { if ($session->last_error != SOAR_ERR_SESSION_KEY_NOT_FOUND) { errlog::add("%s|%s: cookie(%s)=%s not valid, ", "err:%s", basename(__FILE__), __METHOD__, self::SID, $sid, $session->last_error); return false; } $user_info[$key] = ''; } else $user_info[$key] = $vals[0]; } return $user_info; } /** * logout 1.0版本 * * @return boolen|array */ private static function logout_1_0() { // Check cookie if (! isset($_COOKIE[self::SID])) { //Kohana::log("error", __METHOD__ . ": cookie (" . self::SID . ") not set on line " . __LINE__); return false; } $sid = $_COOKIE[self::SID]; // Initialized session manager. require_once dirname(__FILE__) . '/../3rd/soar/1.0/soar.inc'; $soar = new soar(); $session = $soar->session(); $soar->close(); // Fetch session values. $session->setsid($sid); if ($session->destroy() != true) { //Kohana::log("error", __METHOD__ . ": cookie(" . self::SID . ")=$sid not valid, err:" . $session->last_error . "on line " . __LINE__); return false; } setcookie(self::SID, "", 0, "/", self::DOMAIN); return true; } /** * logout 1.2版本 * @return boolen */ private static function logout_1_2() { // Soar require_once dirname(__FILE__) . '/../3rd/soar/1.2/web.inc'; errlog::init("httpd", self::$errlog_location); if (! isset($_COOKIE[self::SID])) { errlog::add("%s.%s: cookie(%s) empty", basename(__FILE__), __METHOD__, self::SID); return false; } $sid = $_COOKIE[self::SID]; $svcenv = new svcenv(self::$svcenv['passport']); $session = $svcenv->session(); $session->setsid($sid); if ($session->destroy() != true) { errlog::add("%s.%s: fail, err:%s", basename(__FILE__), __METHOD__, $session->last_error); } setcookie(self::SID, "", 0, "/", self::DOMAIN); return true; } /** * 修正数据 * * @param array $fileds * @param array $data * @return array */ private static function getParam($fileds, $data) { if (empty($fileds)) { return array(); } $row = array(); foreach ($fileds as $k => $v) { $row[$v] = isset($data[$k]) ? $data[$k] : null; } return $row; } /** * 登录页面 */ private static function login() { $returl = urlencode("http://" . $_SERVER["HTTP_HOST"] . $_SERVER['PHP_SELF']); // Redirect passport logout. header('Location:http://member.playcool.com/sign_in.aspx?ReturnUrl=' . $returl); exit(); } } // End ^ LF ^ UTF-8