本文實(shí)例講述了PHP簡單實(shí)現(xiàn)單點(diǎn)登錄功能。分享給大家供大家參考,具體如下:
1.準(zhǔn)備兩個(gè)虛擬域名
127.0.0.1 www.openpoor.com
127.0.0.1 www.myspace.com
2.在openpoor的根目錄下創(chuàng)建以下文件
index.PHP
?php session_start(); ?> !DOCTYPE html> html> head> meta charset="UTF-8"/> title>sync login/title> /head> body> ?php if(empty($_SESSION['username'])):?> hello,游客;請(qǐng)先a href="login.php" rel="external nofollow" >登錄/a>a rel="external nofollow" rel="external nofollow" >進(jìn)入空間/a> ?php else: ?> hello,?php echo $_SESSION['username']; ?>;a rel="external nofollow" rel="external nofollow" >進(jìn)入空間/a> ?php endif; ?> a rel="external nofollow" >home/a> /body> /html>
login.php
?php session_start(); if(!empty($_POST['username'])){ require '../Des.php'; $_SESSION['username'] = $_POST['username']; $redirect = 'http://www.openpoor.com/index.php'; header('Location:http://www.openpoor.com/sync.php?redirect='.urlencode($redirect).'code='.Des::encrypt($_POST['username'],'openpoor'));exit; } ?> !DOCTYPE html> html> head> meta charset="UTF-8"/> title>sync login/title> /head> body> form action="" method="post"> input type="text" name="username" placeholder="用戶名"/> input type="text" name="password" placeholder="密碼"/> input type="submit" value="登錄"/> /form> /body> /html>
sync.php
?php $redirect = empty($_GET['redirect']) ? 'www.openpoor.com' : $_GET['redirect']; if(empty($_GET['code'])){ header('Loaction:http://'.urldecode($redirect)); exit; } $apps = array( 'www.myspace.com/slogin.php' ); ?> !DOCTYPE html> html> head> meta charset="UTF-8"/> ?php foreach($apps as $v): ?> script type="text/javascript" src="http://?php echo $v.'?code='.$_GET['code'] ?>">/script> ?php endforeach; ?> title>passport/title> /head> body> script type="text/javascript"> window.onload=function(){ location.replace('?php echo $redirect; ?>'); } /script> /body> /html>
3.在myspace的根目錄下創(chuàng)建如下文件
slogin文件 完成session的設(shè)置
?php session_start(); header('Content-Type:text/javascript; charset=utf-8'); if(!empty($_GET['code'])){ require '../Des.php'; $username = Des::decrypt($_GET['code'],'openpoor'); if(!empty($username)){ header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"'); $_SESSION['username'] = $username; } } ?>
index.php
?php session_start(); if(!empty($_SESSION['username'])) { echo "歡迎來到".$_SESSION['username']."的空間"; }else{ echo "請(qǐng)先登錄"; } ?>
4.Des.php的文件內(nèi)容如下
?php /** *@see Yii CSecurityManager; */ class Des{ public static function encrypt($data,$key){ $module=mcrypt_module_open('des','', MCRYPT_MODE_CBC,''); $key=substr(md5($key),0,mcrypt_enc_get_key_size($module)); srand(); $iv=mcrypt_create_iv(mcrypt_enc_get_iv_size($module), MCRYPT_RAND); mcrypt_generic_init($module,$key,$iv); $encrypted=$iv.mcrypt_generic($module,$data); mcrypt_generic_deinit($module); mcrypt_module_close($module); return md5($data).'_'.base64_encode($encrypted); } public static function decrypt($data,$key){ $_data = explode('_',$data,2); if(count($_data)2){ return false; } $data = base64_decode($_data[1]); $module=mcrypt_module_open('des','', MCRYPT_MODE_CBC,''); $key=substr(md5($key),0,mcrypt_enc_get_key_size($module)); $ivSize=mcrypt_enc_get_iv_size($module); $iv=substr($data,0,$ivSize); mcrypt_generic_init($module,$key,$iv); $decrypted=mdecrypt_generic($module,substr($data,$ivSize,strlen($data))); mcrypt_generic_deinit($module); mcrypt_module_close($module); $decrypted = rtrim($decrypted,"\0"); if($_data[0]!=md5($decrypted)){ return false; } return $decrypted; } } ?>
當(dāng)在openpoor登錄后將session信息傳到其他域名下的文件下進(jìn)行處理,以script標(biāo)簽包含的形式進(jìn)行運(yùn)行。
5.此時(shí)訪問www.openpoor.com和www.myspace.com都是未登錄狀態(tài)
登錄后兩個(gè)域名下都是登錄狀態(tài)
到此我們實(shí)現(xiàn)了一個(gè)簡單的單點(diǎn)登錄。
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP+MySQL會(huì)員系統(tǒng)開發(fā)專題》、《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計(jì)算法總結(jié)》、《php字符串(string)用法總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《PHP常用遍歷算法與技巧總結(jié)》及《PHP數(shù)學(xué)運(yùn)算技巧總結(jié)》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
標(biāo)簽:宜春 工商登記 澳門 常德 深圳 延安 宿遷 佛山
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PHP簡單實(shí)現(xiàn)單點(diǎn)登錄功能示例》,本文關(guān)鍵詞 PHP,簡單,實(shí)現(xiàn),單點(diǎn),登錄,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。