www.gusucode.com > Kodexplorer 可道云PHP在线文件管理系统源码程序 > kodexplorer_v4.32/app/api/sso.class.php

    <?php
/*
* @link http://kodcloud.com/
* @author warlee | e-mail:kodcloud@qq.com
* @copyright warlee 2014.(Shanghai)Co.,Ltd
* @license http://kodcloud.com/tools/license/license.txt
*/
require_once(dirname(dirname(__FILE__)).'/function/web.function.php');
class SSO{
	static private function init(){
		$sessionName = 'KOD_SESSION_SSO';
		$sessionID   = $_COOKIE[$sessionName]?$_COOKIE[$sessionName]:md5(uniqid());
		$basicPath   = dirname(dirname(dirname(__FILE__))).'/';
		$sessionPath = $basicPath.'data/session/';
		if(file_exists($basicPath.'config/define.php')){
			include($basicPath.'config/define.php');
			$sessionPath = DATA_PATH.'session/';
		}
		if(!file_exists($sessionPath)){
			mkdir($sessionPath);
		}
		$sessionSavePath = @session_save_path();
		@session_write_close();
		@session_name($sessionName);
		if( class_exists('SaeStorage') ||
			defined('SAE_APPNAME') ||
			defined('SESSION_PATH_DEFAULT') ||
			@ini_get('session.save_handler') != 'files' ||
			isset($_SERVER['HTTP_APPNAME']) ){
			//sae 关闭自定义session路径
		}else{
			@session_save_path($sessionPath);//session path
		}
		@session_id($sessionID);

		@session_start();
		$_SESSION['kodSSO'] = true;
		@session_write_close();
		unset($_SESSION);
		@session_start();
		if(!isset($_SESSION['kodSSO']) || !$_SESSION['kodSSO']){
			@session_save_path($sessionSavePath);//session path
			@session_start();
			$_SESSION['kodSSO'] = true;
			@session_write_close();
		}
		//echo '<pre>';var_dump($_SESSION);echo '</pre>';exit;
		return $_SESSION;
	}

	/**
	 * 设置session 认证
	 * @param  [type] $key [认证key]
	 */
	static public function sessionSet($key,$value='success'){
		self::init();
		@session_start();
		$_SESSION[$key] = $value;
		@session_write_close();
	}


	static public function sessionCheck($key,$value='success'){
		$session = self::init();
		if( isset($session[$key]) && $session[$key] == $value){
			return true;
		}
		return false;
	}

	/**
	 * 直接调用kod的登陆检测(适用于同服务器同域名;)
	 * @param  [type] $kodHost kod的地址;例如 http://test.com/ ;默认为插件目录
	 * @param  [type] $appKey  应用标记 例如 loginCheck
	 * @param  [type] $appUrl  验证后跳转到的url;默认为当前url
	 * @param  [type] $auth    验证方式:例如:'check=userName&value=smartx'
	 *          check (userID|userName|roleID|roleName|groupID|groupName) 校验方式,为空则所有登陆用户
	 */
	static public function sessionAuth($appKey,$auth,$kodHost='',$appUrl=''){
		if($kodHost==''){
			$appUrl = this_url();
			if(strstr($appUrl,'/plugins/')){
				$kodHost = substr($appUrl,0,strpos($appUrl,'/plugins/'));
			}else{
			    if(isset($_COOKIE['APP_HOST'])){
			        $kodHost = $_COOKIE['APP_HOST'];
			    }else{
    			    $kodHost = $_SERVER['HTTP_REFERER'];
    				if(strstr($kodHost,'/index.php?')){
    					$kodHost = substr($kodHost,0,strpos($kodHost,'/index.php?'));
    				}else if(strstr($kodHost,'/?')){
    					$kodHost = substr($kodHost,0,strpos($kodHost,'/?'));
    				}
			    }
			}
		}
		$authUrl = rtrim($kodHost,'/').'/index.php?user/sso&app='.$appKey.'&'.$auth;
		if($appUrl == ''){
			$appUrl = this_url();
		}
		if(!self::sessionCheck($appKey)){
			session_destroy();
			header('Location: '.$authUrl.'&link='.rawurlencode($appUrl));
			exit;
		}
	}
}