<?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.'define.php')){
			include($basicPath.'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(!$_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
	 * @param  [type] $auth    验证方式：例如:'check=userName&value=smartx'
	 *          check (userID|userName|roleID|roleName|groupID|groupName) 校验方式,为空则所有登陆用户
	 */
	static public function sessionAuth($appKey,$auth,$kodHost,$appUrl=''){
		$authUrl = rtrim($kodHost,'/').'/index.php?user/sso&app='.$appKey.'&'.$auth;
		if($appUrl == ''){
			$appUrl = $_SERVER['REQUEST_SCHEME'].'://'.$_SERVER['SERVER_NAME'].
					':'.$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
		}
		if(!self::sessionCheck($appKey)){
			header('Location: '.$authUrl.'&link='.rawurlencode($appUrl));
			exit;
		}
	}
}
