discuz登入流程解析 版本X3 2

2021-08-15 08:51:55 字數 3040 閱讀 2614

discuz登入流程解析,最近在研究,ucenter的同步登陸機制,就先從discuz的登入開始了

1.form表單提交

member.php?mod=logging&action=login&loginsubmit=yes&handlekey=login&loginhash=lm137&inajax=1

處理指令碼  source/module/member/member_logging.php

$ctl_obj =newlogging_ctl();//初始化登陸物件,source\class\class_member.php=>class logging_ctl

$ctl_obj->setting =$_g['setting'];

$method ='on_'.$_get['action'];//$method='on_login';

$ctl_obj->template='member/login';

$ctl_obj->$method();//呼叫source\class\class_member.php=>on_login()

下面對source\class\class_member.php的on_login進行分析

2.source\class\class_member.php

on_login函式太長,只貼出其核心部分,該函式也是登入過程中的核心函式,通過 userlogin(uc_client\control\user.php)進行資料分析,並對返回結果

resu

lt進行

分析處理

,返回結

果 result進行分析處理,返回結果

result['status']>0時,顯示登陸成功,setloginstatus進行登入狀態記錄

$result =userlogin($_get['username'],$_get['password'],$_get['questionid'],$_get['answer'],$this->setting['autoidselect']?'auto':$_get['loginfield'],$_g['clientip']);//95行左右,userlogin為核心處理函式,來至uc_client\client.php//根據$result['status']返回值進行處理

············

if($result['status']>0)//當$result['status']>0時,為登陸成功

setloginstatus($result['member'],$_get['cookietime']?2592000:0);//記錄登入狀態,完成登入動作

下面對uc_client\client.php的uc_user_login進行分析

3.uc_client\client.php

函式uc_user_login通過call_user_func呼叫uc_client\control\user.php的onlogin函式

functionuc_user_login($username,$password,$isuid =0,$checkques =0,$questionid ='',$answer ='',$ip ='')

...................

functionuc_api_mysql($model,$action,$args=array())else

include_once uc_root.'./model/base.php';

include_once uc_root."./control/$model.php";//引入uc_client\control\user.php

eval("\$uc_controls['$model'] = new control();");

}

if($action!='_')else

}

4.uc_client\control\user.php

onlogin函式對資料進行分析,返回結果,回第2步中source\class\class_member.php的

functiononlogin()

if($isuid ==1)elseif($isuid ==2)else

$passwordmd5 =preg_match('/^\w$/',$password)?$password :md5($password);

if(empty($user))elseif($user['password']!=md5($passwordmd5.$user['salt']))elseif($checkques &&$user['secques']!=$_env['user']->quescrypt($questionid,$answer))else

if($ip &&$this->settings['login_failedtime']&&$status <=0)

$merge =$status !=-1&&!$isuid &&$_env['user']->check_mergeuser($username)?1:0;

returnarray($status,$user['username'],$password,$user['email'],$merge);

}

登入解析完成完成

discuz模組更新使用流程解析

模板檔案中的模組呼叫 控制檔案呼叫模板檔案,解析模板檔案,取出頁面上呼叫的模組,在模板解析檔案頭部新增 處理函式說明 function core.php function block.php block get block get batch block display block display ...

discuz模板解析注釋

1php2 3function parse template tplfile objfile 13 14 template fread fp filesize tplfile 15 fclose fp 16 17 匹配變數 18 雙引號 單引號 內的 具有轉義所以,要得到乙個 必須寫為 要得到乙個 ...

Discuz 模板解析語法

x2.5新增內容 從 discuz x2.5 開始,模板檔案支援 php 副檔名的格式,你可以建立例如 template mytext common forum discuz.php 檔案,php 的模板檔案中你只需在原有 htm 的模板檔案開頭新增一行 即可,如 php 的模板檔案的模板資料內容將...