168整站整合dz问题:
直接将你提供的整合代码保存为login.php文件,上传覆盖168整站下的同名文件!在整站页面点击登录,出现提示:
Passport disabled
不知道是何原因,烦请朋友能说得详细一点,你的代码,我还要做些什么?
//=========168整站 与 discuz的passport整合===========
//假设discuz安装路径为168整站下的一个文件夹discuz_bbs/
//discuz_bbs 的通行证passportkey=1234567890
//已经调试通过
require_once("./global.php");
if(!$jumpurl||ereg("login.php",$jumpurl) ){
if($_COOKIE['loginurl'] && !ereg("login.php",$_COOKIE['loginurl'])){
$jumpurl=$_COOKIE['loginurl'];
}elseif( !ereg("login.php",$FROMURL) ){
$jumpurl=$FROMURL;
}else{
$jumpurl="./index.php";
}
}
if($lfjid&&$action!="quit"){
refreshto("./","have_login",0);
}elseif($action=="quit"){
//if( is_passport ){
setcookie('passport',"",0,'/');
//}else{
// setcookie('lfjuid','',0,'/');
// setcookie('lfjid','',0,'/');
// setcookie('lfjpwd','',0,'/');
// setcookie('loginurl','',0,'/');
//}
//=====================================================
//============================discuz logout 整合==============
//=====================================================
$passportkey="1234567890";//这里换成你论坛通行证设置的passportkey
$auth=$_COOKIE['auth'];//这里是login完成时设置的cookie auth
setcookie("auth", "",time() - 3600);
$forward=$_GET['forward'];
$forward=($forward=="")?$FROMURLforward;
$verify = md5('logout'.$auth.$forward.$passportkey);
$auth=rawurlencode($auth);
$forward=rawurlencode($forward);
header("Location: discuz_bbs/api/passport.php?action=logout&auth=$auth&forward=$forward&verify=$verify");
//=====================================================
//============================discuz logout 整合结束============
//=====================================================
//refreshto($FROMURL,'quit_succeed'); 这句屏蔽
}elseif($step){
if(!$loginuser){
showerr("forbid_no_username");
}elseif(!$loginpwd){
showerr("forbid_no_pwd");
}
$loginpwd=md5($loginpwd);
$logindb=$db->get_one("select * from {$P_M[m][table]} where {$P_M[m][username]}='$loginuser' ");
if($logindb){
$logindb[password]=$logindb[$P_M[m][password]];
$logindb['thisvisit']=$logindb[$P_M[m][thisvisit]];
$logindb[yz]=$logindb[$P_M[m][yz]];
$logindb[onlineip]=$logindb[$P_M[m][onlineip]];
$logindb[uid]=$logindb[$P_M[m][uid]];
$logindb[username]=$logindb[$P_M[m][username]];
$logindb[email]=$logindb[$P_M[m][email]];//这一句需要
}
if(!$logindb['password']){
showerr("no_username");
}elseif($logindb['password']!=$loginpwd){
showerr("pwd_err");
}elseif($logindb['password']==$loginpwd){
if($logindb['yz']>1){
showerr("no_yz");
}
if( date("d",$logindb['thisvisit'])!=$usr_info['today'] ){
$SQL=",{$P_M[m][todaypost]}=0,{$P_M[m][attach]}=0 ";
}else{
$SQL="";
}
$logindb[thisvisit] || $logindb[thisvisit]=$timestamp;
$db->query("update {$P_M[m][table]} set {$P_M[m][lastvisit]}='$logindb[thisvisit]',{$P_M[m][thisvisit]}='$timestamp',{$P_M[m][loginnum]}={$P_M[m][loginnum]}+1,{$P_M[m][lastip]}='$logindb[onlineip]'$SQL where {$P_M[m][username]}='$loginuser' ");
if($cktime){
$cktime=$timestamp+$cktime;
}else{
$cktime=$timestamp+3600; //默认为1小时 这里有点问题
}
//if(is_passport){
setcookie('passport',"$logindb[uid]\t$loginuser\t$loginpwd",$cktime,'/');
//}else{
// setcookie('lfjuid',$logindb['uid'],$cktime,'/');
// setcookie('lfjid',$logindb['username'],$cktime,'/');
// setcookie('lfjpwd',$loginpwd,$cktime,'/');
// setcookie('loginurl','',0);
//}
$lfjdb=$logindb;
write_usrinfo($lfjdb);
//=======================================
//============================discuz login 整合=
//=======================================
//==============header到bbs=================
$member = array
(
'cookietime' => $cktime,
'time' => time(),
'username' => $logindb[username],
'password' => $logindb[password],
'email' => $logindb[email]
);
$passportkey="1234567890";//这里换成你论坛通行证设置的passportkey
$auth = passport_encrypt(passport_encode($member), $passportkey);
setcookie("auth",$auth,$cktime);
$forward=$_POST['forward'];
$forward=($forward=="")?$jumpurlforward;
$verify = md5('login'.$auth.$forward.$passportkey);
$auth=rawurlencode($auth);
$forward=rawurlencode($forward);
header("Location: discuz_bbs/api/passport.php?action=login&auth=$auth&forward=$forward&verify=$verify");
//refreshto($jumpurl,'login_succeed');
}
}else{
require_once(html("css"));
require_once(html("head"));
require_once(html("login"));
require_once("foot.php");
}
//=============================================================
//=============以下为拷贝过来的函数=============================
/**
* Passport 加密函数
*
* @param string 等待加密的原字串
* @param string 私有密匙(用于解密和加密)
*
* @return string 原字串经过私有密匙加密后的结果
*/
function passport_encrypt($txt, $key) {
// 使用随机数发生器产生 0~32000 的值并 MD5()
srand((double)microtime() * 1000000);
$encrypt_key = md5(rand(0, 32000));
// 变量初始化
$ctr = 0;
$tmp = '';
// for 循环,$i 为从 0 开始,到小于 $txt 字串长度的整数
for($i = 0; $i < strlen($txt); $i++) {
// 如果 $ctr = $encrypt_key 的长度,则 $ctr 清零
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
// $tmp 字串在末尾增加两位,其第一位内容为 $encrypt_key 的第 $ctr 位,
// 第二位内容为 $txt 的第 $i 位与 $encrypt_key 的 $ctr 位取异或。然后 $ctr = $ctr + 1
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
}
// 返回结果,结果为 passport_key() 函数返回值的 base65 编码结果
return base64_encode(passport_key($tmp, $key));
}
/**
* Passport 解密函数
*
* @param string 加密后的字串
* @param string 私有密匙(用于解密和加密)
*
* @return string 字串经过私有密匙解密后的结果
*/
function passport_decrypt($txt, $key) {
// $txt 的结果为加密后的字串经过 base64 解码,然后与私有密匙一起,
// 经过 passport_key() 函数处理后的返回值
$txt = passport_key(base64_decode($txt), $key);
// 变量初始化
$tmp = '';
// for 循环,$i 为从 0 开始,到小于 $txt 字串长度的整数
for ($i = 0; $i < strlen($txt); $i++) {
// $tmp 字串在末尾增加一位,其内容为 $txt 的第 $i 位,
// 与 $txt 的第 $i + 1 位取异或。然后 $i = $i + 1
$tmp .= $txt[$i] ^ $txt[++$i];
}
// 返回 $tmp 的值作为结果
return $tmp;
}
/**
* Passport 密匙处理函数
*
* @param string 待加密或待解密的字串
* @param string 私有密匙(用于解密和加密)
*
* @return string 处理后的密匙
*/
function passport_key($txt, $encrypt_key) {
// 将 $encrypt_key 赋为 $encrypt_key 经 md5() 后的值
$encrypt_key = md5($encrypt_key);
// 变量初始化
$ctr = 0;
$tmp = '';
// for 循环,$i 为从 0 开始,到小于 $txt 字串长度的整数
for($i = 0; $i < strlen($txt); $i++) {
// 如果 $ctr = $encrypt_key 的长度,则 $ctr 清零
$ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
// $tmp 字串在末尾增加一位,其内容为 $txt 的第 $i 位,
// 与 $encrypt_key 的第 $ctr + 1 位取异或。然后 $ctr = $ctr + 1
$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
}
// 返回 $tmp 的值作为结果
return $tmp;
}
/**
* Passport 信息(数组)编码函数
*
* @param array 待编码的数组
*
* @return string 数组经编码后的字串
*/
function passport_encode($array) {
// 数组变量初始化
$arrayenc = array();
// 遍历数组 $array,其中 $key 为当前元素的下标,$val 为其对应的值
foreach($array as $key => $val) {
// $arrayenc 数组增加一个元素,其内容为 "$key=经过 urlencode() 后的 $val 值"
$arrayenc[] = $key.'='.urlencode($val);
}
// 返回以 "&" 连接的 $arrayenc 的值(implode),例如 $arrayenc = array('aa', 'bb', 'cc', 'dd'),
// 则 implode('&', $arrayenc) 后的结果为 ”aa&bb&cc&dd"
return implode('&', $arrayenc);
}
//===================================================================
//===========================拷贝结束===================================
?> |