最近在做discuz和phpwind blog整合。
网上下了很多插件,都不能很好的整合在一起。不是数据不能同步就是登录cookie不能同步。
下载的插件还都是zend加密的,没办法,只好自己写代码了!
phpwind blog文件中mod目录下有个passport文件,首先修改这里了!
我的discuzz表前缀是bbs_,phpwind blog表前缀是pw_,文件如下(我注册页面统一在discuz了,所以数据register不起作用):
if ( !function_exists( "readover" ) )
{
exit( "Forbidden" );
}
if ( $do == "login" )
{
include_once( D_P."data/cache/passport.php" );
$db->select_db( $ps_bbsdbname );
$PW = $ps_bbspre;
$rt = $db->get_one( "SELECT uid,groupid,password,email FROM bbs_members WHERE username='".$pwuser."'" );
add_s( $rt );
add_s( $gp );
$grouupid = $rt['groupid'] == "-1" ? $rt['memberid'] : $rt['groupid'];
if ( $gp['hk_value'] && strpos( $gp['hk_value'], ",".$grouupid."," ) === false )
{
showmsg( "group_rightlimit" );
}
else if ( $rt && $rt['password'] == $pwpwd )
{
include( D_P."data/sql_config.php" );
$db->select_db( $dbname );
include_once( D_P."data/cache/dbreg.php" );
include_once( D_P."data/cache/level.php" );
$rg_memberid = array_search( "0", $lneed );
$rg_groupid = $rg_ifcheck == "1" ? "7" : "-1";
$verify = $rg_emailcheck == 1 ? $timestamp : 1;
$rg_ifconvert = 0;
$db->update( "INSERT INTO pw_user(username,password,email,publicmail,groupid,gender,regdate,qq, icq,site,rvrc,money,lastvisit,thisvisit,shownum,verify,onlineip,signchange)\tVALUES('".$pwuser."','{$pwpwd}','{$rt['email']}','1','{$rg_groupid}','0','{$timestamp}','','','','".( integer )$rg_regrvrc."','".( integer )$rg_regmoney.( "','".$timestamp."','{$timestamp}','500','{$verify}','{$onlineip}','{$rg_ifconvert}')" ) );
$winduid = $db->insert_id( );
$db->update( "INSERT INTO pw_domain(uid,bbsuid,username,blogname) VALUES ('".$winduid."','{$rt['uid']}','{$pwuser}','{$pwuser}')" );
$db->update( "UPDATE pw_bloginfo SET newmember='".$pwuser."',totalmember=totalmember+1 WHERE id='1'" );
}
else
{
showmsg( "passport_error" );
}
}
else if ( $do == "register" )
{
include_once( D_P."data/cache/passport.php" );
$db->select_db( $ps_bbsdbname );
$PW = $ps_bbspre;
$rt = $db->get_one( "SELECT uid FROM bbs_members WHERE username='".$rg_name."'" );
add_s( $rt );
if ( $rt )
{
if ( function_exists( "Showmsg" ) )
{
showmsg( "username_same" );
}
else if ( function_exists( "adminmsg" ) )
{
adminmsg( "username_same" );
}
else if ( function_exists( "usermsg" ) )
{
$basename = $user_file."?action=bbsatc&job=bbsreg";
usermsg( "username_same" );
}
else
{
exit( "username already exists!" );
}
}
else
{
if ( $rg_ifcheck == "1" )
{
$rg_groupid = "7";
}
else
{
$rg_groupid = "-1";
}
$rt = $db->get_one( "SELECT groupid FROM bbs_usergroups WHERE type='member' AND creditslower='0'" );
$rg_memberid = $rt['gid'];
$rg_yz = $rg_emailcheck == 1 ? $timestamp : 1;
$db->update( "INSERT INTO bbs_members(username,password,email,groupid) VALUES('".$rg_name."','{$rg_pwd}','{$rg_email}','10')" );
}
include( D_P."data/sql_config.php" );
$db->select_db( $dbname );
include( D_P."data/cache/dbreg.php" );
}
然后就是cookie的同步问题了:
在discuz登录时加上如下代码:
//设置blog登录cookie
$sql_blogid="SELECT uid FROM pw_domain WHERE bbsuid='$discuz_uid'";
$result_blogin=mysql_query($sql_blogid);
$rowbg=mysql_fetch_array($result_blogin);
require_once"../blog/upload/global.php";
$winduid=$rowbg["uid"];
$windpwd=confuse($discuz_pw);
$cktime=$cookietime;
$db_ckdomain='192.168.1.110';
$db_ckpath='/';
//echo $winduid;
//dsetcookie('bloguser', authcode("$winduid\t$windpwd", 'ENCODE'), $cookietime);
Cookie("bloguser",$winduid."\t".$windpwd,$cktime);
Cookie("ckinfo",$db_ckpath."\t".$db_ckdomain);
//Cookie('lastvisit','',0);
//设置blog登录cookie结束
在phpwind blog登录时加上如下代码:
//设置discuz登录cookie
//require_once "../../../include/global.func.php";
//require_once "../../../include/common.inc.php";
$sql_id=$db->get_one("SELECT pw_domain.bbsuid,bbs_members.password FROM pw_domain,bbs_members WHERE pw_domain.uid='$winduid' AND bbs_members.uid=pw_domain.bbsuid");
$discuz_uid=$sql_id['bbsuid'];
$discuz_pw=$sql_id['password'];
$discuz_secques='';
//$db_ckdomain='192.168.1.110';
//$db_ckpath='/';
$cookietime = 31536000;
dsetcookie('bbs_cookietime', $cookietime, 31536000);
dsetcookie('bbs_auth', authcode("$discuz_pw\t$discuz_secques\t$discuz_uid", 'ENCODE'), $cookietime);
//设置discuz登录cookie
然后要做的就是将discuz的global.func.php文件中的加密解密函数和设置cookie的函数另存为fun.php包含到phpwind blog登录页面就可以了!