搭建了一個個人網站,希望使用phpwind來完成論壇功能.但很快就發現存在用戶同步的問題,我的網站已經有了用戶管理功能, phpwind論壇也有.因此用戶同步注冊,登陸和注銷是必須要實現的. 網上說可以使用ucenter,但沒有找到相關資料。倒是找到了一些手動實現同步登錄的資料.
不過這些寫的都不太全面,或者有些問題.我來總結一下好了.
首先確認要同步的版本是phpwind8.7.這個phpwind目前支持下載的兩大版本之一,還有一個是9,不過貌似變化比較大。8.7版本目前也是阿里云虛擬主機一鍵安裝lamp缺省提供的論壇版本。
首先是實現用戶注冊的同步:
1)先把phpwind解壓到http服務器某個目錄下,我的是放到了網站的一個phpwind子目錄下,啟動install.php安裝。
2)在完成自身網站用戶注冊的代碼后面,增加如下代碼即可:
- require_once '../phpwind/global.php';
- require_once(R_P.'require/checkpass.php');
- $registerinfo->mail=email;
- $registerinfo->nickname=username;
- $registerinfo->uid=userid;
- $this->registeInphpWind($registerinfo);
- //-------------------------------------------------
- registeInphpWind函數的實現如下:
- protected function registeInphpWind(stdClass $registerinfo)
- {
- $ret=new Ret();
- //pw = phpwind 的安裝前綴
- //判斷pw中是否有該會員數據
- $sql_valid = "select uid from phpwinddb.pw_members where username = '$registerinfo->nickname'";
- if (!$result=mysql_query($sql_valid))
- {
- error_log(mysql_error());
- $ret->errorcode=Error_DB_Query;
- return $ret;
- }
- $row = mysql_fetch_object($result);
- mysql_free_result($result);
- if(!$row)
- {
- //插入該會員數據到phpwind的pw_members表
- $sql = "insert into phpwinddb.pw_members(uid,username,password,email,groupid,memberid,icon,gender,regdate,signature,introduce,location,bday,yz,aliww,banpm) values ($registerinfo->uid,'$registerinfo->nickname','$registerinfo->password','$registerinfo->mail',-1,8,'',0,'".time()."','','','','".date("Y-m-d",time())."',1,'','')";
- mysql_query($sql);
- //插入數據到phpwind的pw_memberdata表
- mysql_query("INSERT INTO phpwinddb.pw_memberdata (uid,postnum,rvrc,money,lastvisit,thisvisit,onlineip) VALUES ($registerinfo->uid, '0', '0', '0', '" . time() . "', '" . time() . "', '')");
- mysql_query("UPDATE phpwinddb.pw_bbsinfo SET newmember='$registerinfo->nickname',totalmember=totalmember+1 WHERE id='1'");
- }
- $plinfo=new stdClass();
- $plinfo->username=$registerinfo->nickname;
- $plinfo->password=$registerinfo->password;
- $this->loginPHPWind($plinfo);
- }
以上最后一部分是實現用戶登錄,下面看看用戶同步登錄的實現,phpwind用戶同步登錄:
- protected function loginPHPWind(stdClass $plinfo)
- {
- //與phpwind登陸同步,原理:共用cookie
- $pwuser=$plinfo->username;
- $md5_pwpwd=$plinfo->password;
- $safecv=questcode('-1','1','1');
- $logininfo = checkpass($pwuser, $md5_pwpwd, $safecv, $lgt, true);
- list($winduid, $groupid, $windpwd, $showmsginfo) = $logininfo;
- $param2=StrCode($winduid."/t".$windpwd."/t".'');
- Cookie("winduser",$param2);
- Cookie("ck_info",$db_ckpath."/t".$db_ckdomain);
- Cookie('lastvisit','',0);//將$lastvist清空以將剛注冊的會員加入今日到訪會員中
- }
3)同步登出,退出登錄
這個超級簡單,就一句話:Loginout();這個函數在checkpass.php里面,所以把這個文件包含進來就可以調用了,下一步是修改phpwind,實現自身網站的同步注冊,登錄和登出,目前我只實現了同步注冊,弄好其他的再一起再發上來.
新聞熱點
疑難解答
圖片精選