discuz Passport 通行證 整合筆記
更新時(shí)間:2008年06月30日 09:10:28 作者:
上次整合discuz的passport,覺(jué)得簡(jiǎn)單,就沒(méi)記下來(lái),今天移動(dòng)bbs的位置,以前整合的不能用,如何不用passport登陸論壇?!
太簡(jiǎn)單了,但時(shí)間長(zhǎng)了,記不得,浪費(fèi)我半小時(shí)找資料,深刻體會(huì)好記性不如爛筆頭?。〗裉彀裵assport文擋貼上,防止以后忘記??!記住,網(wǎng)上找到自己需要的資料也要耗時(shí)間的!!!!!!
請(qǐng)注意: 整合不成功可能造成的后果-----dz論壇無(wú)法登錄,無(wú)法管理
解決辦法:
第一步: 到dz的數(shù)據(jù)庫(kù)表cdb_settings 找到下面這幾行修改為
第二步: 刪除dz安裝目錄/forumdata/cache/cache_settings.php
第三步: 重新訪問(wèn)論壇
登陸和注冊(cè)整合流程
用戶從登陸或注冊(cè)表單提交帳號(hào)密碼信息 ==>
主站程序檢驗(yàn)用戶登陸或注冊(cè),成功(注冊(cè)需要生成新用戶)則 ==>
設(shè)置主站自身的cookie或session ==>
url傳遞 返回地址forward和編碼后的用戶信息和其他信息 到dz/api/passport.php
整合之前請(qǐng)先仔細(xì)閱讀官方passport技術(shù)文檔: http://www.discuz.net/usersguide/advanced_passport.htm
Passport 通行證 整合
第一篇:整合原理請(qǐng)注意: 整合不成功可能造成的后果-----dz論壇無(wú)法登錄,無(wú)法管理
解決辦法:
第一步: 到dz的數(shù)據(jù)庫(kù)表cdb_settings 找到下面這幾行修改為
第二步: 刪除dz安裝目錄/forumdata/cache/cache_settings.php
第三步: 重新訪問(wèn)論壇
登陸和注冊(cè)整合流程
用戶從登陸或注冊(cè)表單提交帳號(hào)密碼信息 ==>
主站程序檢驗(yàn)用戶登陸或注冊(cè),成功(注冊(cè)需要生成新用戶)則 ==>
設(shè)置主站自身的cookie或session ==>
url傳遞 返回地址forward和編碼后的用戶信息和其他信息 到dz/api/passport.php
整合之前請(qǐng)先仔細(xì)閱讀官方passport技術(shù)文檔: http://www.discuz.net/usersguide/advanced_passport.htm
復(fù)制內(nèi)容到剪貼板
代碼:
<?php
//該文檔保存為login.php
//首先將接口技術(shù)文檔里的加密解密函數(shù)拷貝
//為了不讓代碼太亂,我拷貝到文檔的結(jié)尾處
//假設(shè)自己的用戶數(shù)據(jù)庫(kù)表里用戶名字段為UserName, 密碼字段為Pwd, Email字段為 Email
//注冊(cè)頁(yè)實(shí)現(xiàn)方法差不多,可自行實(shí)現(xiàn),疑問(wèn)加我QQ:2666556
$act=(isset($_GET['act']))?$_GET['act']:"login";
if(function_exists($act)) $act();else login();
function login()
{
$ErrMsg=UserCheck();
if($ErrMsg!="")echo $ErrMsg;
//后面加上顯示你的登陸表單的代碼 如
?>
<form action=login.php?act=login method=post>
用戶名:<input name=username>
密碼:<input name=password>
<input name=submit type=submit value=登陸></form>
<?php
}//end function
function logout()//登出
{
$passportkey="1234567890";//這里換成你論壇通行證設(shè)置的passportkey
$auth=$_COOKIE['auth'];
setcookie("auth", "",time() - 3600);
$forward=$_GET['forward'];
if($forward=="")$forward="../../index.php";//這里換成你的主頁(yè)絕對(duì)地址或相對(duì)地址
$verify = md5('logout'.$auth.$forward.$passportkey);
$auth=rawurlencode($auth);
$forward=rawurlencode($forward);
header("Location: bbs/api/passport.php?action=logout&auth=$auth&forward=$forward&verify=$verify");
}
function UserCheck()
{
$passportkey="1234567890";//這里換成你論壇通行證設(shè)置的passportkey
//===========驗(yàn)證輸入=====================
if(!isset($_POST['submit'])) return; // login表單的按鈕需要與此同名
$usnm=$_POST['username'];//username換成你登陸表單里的用戶名域
$pwd=$_POST['password'];//password換成你登陸表單里的密碼域
if($usnm=="") return "請(qǐng)輸入用戶名!";
if($pwd=="") return "請(qǐng)輸入密碼!";
//=========數(shù)據(jù)庫(kù)處理==========================
$db=mysql_connect("localhost", "root", "");
mysql_select_db("your_db_name");
$sql="Select * from `user` where UserName='".$usnm."' Limit 1";
$rs = mysql_query($sql,$db) ;
$row = mysql_fetch_array($rs);
if(!$row)return "該用戶不存在";
if($row["Pwd"]!=md5($pwd))return "密碼錯(cuò)誤";
mysql_free_result($rs);
//==============header到bbs=====================
$member = array
(
'time' => time(),
'username' => $row["UserName"],
'password' => $row["Pwd"],
'email' => $row["Email"]
);
$auth = passport_encrypt(passport_encode($member), $passportkey);
setcookie("auth",$auth,($_POST["Cookie"]? time()+(int)$_POST["Cookie"] :0));
$forward=$_POST['forward'];
if($forward=="")$forward="../../index.php";
$verify = md5('login'.$auth.$forward.$passportkey);
$auth=rawurlencode($auth);
$forward=rawurlencode($forward);
header("Location: bbs/api/passport.php?action=login&auth=$auth&forward=$forward&verify=$verify");
}
//=============================================================
//=============以下為拷貝過(guò)來(lái)的函數(shù)============================
function passport_encrypt($txt, $key) {
srand((double)microtime() * 1000000);
$encrypt_key = md5(rand(0, 32000));
$ctr = 0;
$tmp = '';
for($i = 0; $i < strlen($txt); $i++) {
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
}
return base64_encode(passport_key($tmp, $key));
}
function passport_decrypt($txt, $key) {
$txt = passport_key(base64_decode($txt), $key);
$tmp = '';
for ($i = 0; $i < strlen($txt); $i++) {
$tmp .= $txt[$i] ^ $txt[++$i];
}
return $tmp;
}
function passport_key($txt, $encrypt_key) {
$encrypt_key = md5($encrypt_key);
$ctr = 0;
$tmp = '';
for($i = 0; $i < strlen($txt); $i++) {
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
}
return $tmp;
}
function passport_encode($array) {
$arrayenc = array();
foreach($array as $key => $val) {
$arrayenc[] = $key.'='.urlencode($val);
}
return implode('&', $arrayenc);
}
//=========================================================================
//===========================拷貝結(jié)束======================================
?>相關(guān)文章
php自動(dòng)注冊(cè)登錄驗(yàn)證機(jī)制實(shí)現(xiàn)代碼
在phpwind站點(diǎn)后臺(tái)添加一個(gè)名為“廣告管家”(廣告管家為CNZZ的一款廣告投放的應(yīng)用)的應(yīng)用,整個(gè)“廣告管家”的應(yīng)用是通過(guò)iframe載入,載入的具體內(nèi)容根據(jù)不同站點(diǎn)顯示針對(duì)該站點(diǎn)的具體內(nèi)容2011-12-12
PHP Parser 掃描應(yīng)用打印輸出結(jié)構(gòu)語(yǔ)句實(shí)例
這篇文章主要為大家介紹了PHP Parser 掃描應(yīng)用打印輸出結(jié)構(gòu)語(yǔ)句實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
wamp服務(wù)器訪問(wèn)php非常緩慢的解決過(guò)程
這篇文章主要介紹了wamp服務(wù)器訪問(wèn)php非常緩慢的解決過(guò)程,十分的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。2015-07-07
php設(shè)計(jì)模式 Decorator(裝飾模式)
動(dòng)態(tài)的給一個(gè)對(duì)象添加一些額外的職責(zé),就擴(kuò)展功能而言比生成子類方式更為靈活2011-06-06
PHP extract 將數(shù)組拆分成多個(gè)變量的函數(shù)
extract()函數(shù)提取關(guān)聯(lián)數(shù)組(對(duì)數(shù)字索引數(shù)組無(wú)效)每對(duì)key和value,生成以key為變量名、value為對(duì)應(yīng)值的多組新變量。2010-06-06
淺談Laravel中如何對(duì)大文件進(jìn)行加密
在Laravel項(xiàng)目中,用戶可以上傳任何大小的文件,出于安全目的,需要對(duì)這些文件進(jìn)行靜態(tài)加密。Laravel提供encryption, 但它們主要用于加密值。 使用encrypt助手方法對(duì)像圖像文件進(jìn)行加密可以很好地工作,文件內(nèi)容需要加載到內(nèi)存中,對(duì)于大文件來(lái)說(shuō)是個(gè)問(wèn)題。2021-05-05
判斷是否為指定長(zhǎng)度內(nèi)字符串的php函數(shù)
判斷是否為指定長(zhǎng)度內(nèi)字符串2010-02-02

