多域名同步登錄,單點登錄SSO

【多個域名+1個登錄域名。登錄成功後將其他多個域名分配SESSION值,即實現了多域名同時登錄的情況。登出同理!】

session_start();//這裏 會默認創建一個COOKIE名爲:PHPSESSID
//$_SESSION['a'] = 'A';
//print_r($_SERVER);exit;

	//單點登錄接口,向其他域名發送同步登錄數據。
	if(isset($_SESSION['a']) && $_SERVER['HTTP_HOST'] == 'www.a.com') 
	{
		//【--------------第1種方法----------】 僅適用於當前域名的所有子域名。只要設置domain參數即可
		//這裏可以把cookie的值保存到數據庫表中。當用戶每次請求時,查詢表中是否有該 ck_a_value ,如果有的話則認爲是登錄狀態。
		setcookie('ck_a_key','ck_a_value_uid_1',time()+300, '/', 'a.com');
		//setcookie('ck_a_key','ck_a_value_uid_1',time()+300);

		//【--------------第2種方法----------】 用iframe,該方法範圍更廣。可適用於其他域名。
		//echo '<iframe src="http://t1.a.com/a.php?ssid='.$_SESSION['a'].'">';		
	}


print_r($_COOKIE);
echo '<br><br>';
print_r($_SESSION);


if(isset($_GET['ssid']))
{
	$_SESSION['a'] = $_GET['ssid'];
}

exit;


假設你有三個不同域名,a.com, b.com, http://c.com,將其中之一作爲真正的登陸入口,所有的域名下發起的登陸,全部重定向到這個節點,這裏假設選擇http://a.com/login.php爲統一登入節點,爲了方便說明,把http://a.com叫做主節點,其餘叫做從節點。 假設現在從任意站點發出登陸請求,最終都被帶到 http://a.com/login.php?from=b.com&sfkey=xxxxxx,用戶輸入登陸信息,假設登陸成功,返回一個登陸成功中間頁面,在這個頁面裏,包含下面html代碼 width="0" height="0" src="https://b.com/sso.php?sessid=xxxxxxxxxxxx&sfkey=xxxxxxxxxxx">> width="0" height="0" src="https://c.com/sso.php?sessid=xxxxxxxxxxxx&sfkey=xxxxxxxxxxx">>sessid是登陸成功以後的session ID,sfkey是一個安全碼,這兩個串在login.php裏綁定到當前登陸的用戶記錄上。 這個時候http://a.com實際已經登陸完畢,獲得了PHPSESSID的cookie。兩個iframe的作用是把獲得的session id立刻同步到從節點上,從節點的sso.php獲得sessid和sfkey後,首先校驗這個配對是否存在,如果存在,立刻把sessid值設爲當前session idsession_id($_GET['sessid']); // 使用a.com產生的session idsession_start();sso.php請求完畢後,b.com和c.com這兩個站點就獲得了和a.com一樣的PHPSESSID cookie; 這個頁面會把用戶重定向回所來自的頁面(到達login.php的時候記住了),重定向完成後,用戶已經在所有網站完成了同步登陸。 http://a.com發送iframe請求的時候使用加密的sessid=xxxxxx裏的sessid,從節點的sso.php獲取密文後解密才獲得真實的session id 你可以用單獨域名來作爲登陸主節點,比如http://login.x.com,而不用a b c中的任意一個,http://login.x.com做且僅作登陸服務。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章