您当前的位置:首页 > CMS常见问题 > 帝国cms常见问题 >

帝国cms MemberConnect_DoLogin函数代码注释

0
<?php
//处理登录
function MemberConnect_DoLogin($apptype,$openid){
	global $empire,$dbtbpre;
	$apptype=RepPostVar($apptype);
	$openid=RepPostVar($openid);
	//验证openid
	$mcr=MemberConnect_CheckOpenid($apptype,$openid);
	//如果返回记录
	if($mcr['id'])
	{
		$lifetime=0;
		$r=$empire->fetch1("select ".eReturnSelectMemberF('*')." from ".eReturnMemberTable()." where ".egetmf('userid')."='".$mcr['userid']."' limit 1");
//$r=$empire->fetch1("select * from {$dbtbpre}enewsmember where userid='".$mcr['userid']."' limit 1");
//userid(用户ID)、username(用户名)、password(用户密码)
//rnd(随机认证码)、email(邮箱)、registertime(注册时间)
//groupid(会员组ID)、userfen(点数)、userdate(有效期)
//money(金额)、zgroupid(到期后转向会员组ID)、havemsg(是否有短信息)
//checked(是否审核)、salt(salt密码加密随机码)、userkey(密钥)

		//生成新的随机认证码, 如果该会员的会员组ID未设置就设置为默认的会员组ID, 设置cookie(用户名、用户ID、用户的会员组ID、随机认证码、登录验证符、登录附加)
		DoEcmsMemberLogin($r,$lifetime);
		//更新该用户的登录次数+1、最后登录时间
		MemberConnect_UpdateBindLogin($mcr['id']);
		//返回指示当前页面的页面地址(返回用户在执行登录的那个页面地址)
		$tourl=$_SESSION['referer']?$_SESSION['referer']:'../../../';
		//重置会话变量
		MemberConnect_ResetVar();
		printerrortourl($tourl);
	}
	else
	{
		printerrortourl('../tobind.php');
	}
}
//验证openid
function MemberConnect_CheckOpenid($apptype,$openid){
	global $empire,$dbtbpre;
	$mcr['id']=0;
	$mcr['userid']=0;
	//如果两个参数其中任何一个的值等于0、空字符串、FALSE或NULL, 则返回数组$mcr
	if(!$apptype||!trim($openid)){
		return $mcr;
	}
	//检查会员外部接口表是否具有记录
	//id(ID)、userid(会员ID)、apptype(接口类型)、bindkey(绑定密钥)
	$mcr=$empire->fetch1("select id,userid from {$dbtbpre}enewsmember_connect where apptype='$apptype' and bindkey='$openid' limit 1");
	return $mcr;
}
//函数eReturnSelectMemberF在/e/member/class/user.php
//返回查询会员字段列表
function eReturnSelectMemberF($f,$tb=''){
	global $ecms_config;
	//是否使用原版会员表信息,0为原版,1为非原版
	if(empty($ecms_config['member']['chmember'])){
		if(!empty($tb)){
			$f=$f=='*'?$tb.$f:$tb.str_replace(',',','.$tb,$f);
		}
		return $f;
	}
	if($f=='*'){
		$f='userid,username,password,rnd,email,registertime,groupid,userfen,userdate,money,zgroupid,havemsg,checked,salt,userkey';
	}
	$r=explode(',',$f);
	$count=count($r);
	$selectf='';
	$dh='';
	for($i=0;$i<$count;$i++){
		$truef=$r[$i];
		if($ecms_config['memberf'][$truef]==$truef){
			$selectf.=$dh.$tb.$truef;
		}else{
			$selectf.=$dh.$tb.$ecms_config['memberf'][$truef].' as '.$truef;
		}
		$dh=',';
	}
	return $selectf;
}
//函数eReturnMemberTable在/e/member/class/user.php
//返回会员表
function eReturnMemberTable(){
	global $ecms_config;
	return $ecms_config['member']['tablename'];
}
//函数egetmf在/e/member/class/user.php
//取得实际会员字段
function egetmf($f){
	global $ecms_config;
	//是否使用原版会员表信息,0为原版,1为非原版
	if(empty($ecms_config['member']['chmember'])){
		return $f;
	}
	return $ecms_config['memberf'][$f]?$ecms_config['memberf'][$f]:$f;
}
//函数DoEcmsMemberLogin在/e/member/class/user.php
//会员登录
function DoEcmsMemberLogin($r,$lifetime=0){
	global $empire,$dbtbpre,$ecms_config;
	$rnd=make_password(20);//取得随机密码
	//默认会员组
	if(empty($r['groupid'])){
		$r['groupid']=eReturnMemberDefGroupid();
	}
	$r['groupid']=(int)$r['groupid'];
	$empire->query("update ".eReturnMemberTable()." set ".egetmf('rnd')."='$rnd',".egetmf('groupid')."='$r[groupid]' where ".egetmf('userid')."='$r[userid]'");
	//更新会员的随机认证码和会员组ID
	//$empire->query("update {$dbtbpre}enewsmember set rnd='$rnd',groupid='$r[groupid]' where userid='$r[userid]'");
	$lifetime=(int)$lifetime;
	$logincookie=0;
	if($lifetime){
		$logincookie=time()+$lifetime;
	}
	//cookie何时到期, 到期时间参数用于设置cookie存在的精确限定的时间长度, 用从新纪元(epoch)(新纪元是1970年1月1日0点)起所经过的秒数表示。
	//如果没有设置它或者把它的值设置为0, cookie将持续起作用, 直到用户关闭了他或她的浏览器。这些cookie被认为在浏览器会话期间一直存在。
	esetcookie("mlusername",$r['username'],$logincookie);//设置用户名cookie
	esetcookie("mluserid",$r['userid'],$logincookie);//设置用户ID cookie
	esetcookie("mlgroupid",$r['groupid'],$logincookie);//设置用户会员组ID cookie
	esetcookie("mlrnd",$rnd,$logincookie);//设置随机认证码cookie
	qGetLoginAuthstr($r['userid'],$r['username'],$rnd,$r['groupid'],$logincookie);//设置登录验证符cookie
	AddLoginCookie($r);//登录附加cookie
}
//函数eReturnMemberDefGroupid在/e/member/class/user.php
//返回默认会员组ID
function eReturnMemberDefGroupid(){
	global $ecms_config,$public_r;
	//注册时会员组ID(ecms的会员组,0为后台默认)
	//注册会员默认会员组,1普通会员,2VIP会员,3企业会员,4企业VIP会员
	$groupid=$ecms_config['member']['defgroupid']?$ecms_config['member']['defgroupid']:$public_r['defaultgroupid'];
	return intval($groupid);
}
//函数qGetLoginAuthstr在/e/member/class/user.php
//登录验证符
function qGetLoginAuthstr($userid,$username,$rnd,$groupid,$cookietime=0){
	global $ecms_config;
	//COOKIE验证随机码2(填写10~50个任意字符, 最好多种字符组合)
	$checkpass=md5(md5($rnd.'-'.$userid.'-'.$username.'-'.$groupid).'-#empire.cms!-'.$ecms_config['cks']['ckrndtwo']);
	esetcookie('mlauth',$checkpass,$cookietime);//设置登录验证符cookie
}
//函数AddLoginCookie在/e/member/class/user.php
//登录附加cookie
function AddLoginCookie($r){}
//函数MemberConnect_UpdateBindLogin在/e/memberconnect/memberconnectfun.php
//更新登录绑定
function MemberConnect_UpdateBindLogin($id){
	global $empire,$dbtbpre;
	$id=(int)$id;
	$lasttime=time();
	$empire->query("update {$dbtbpre}enewsmember_connect set loginnum=loginnum+1,lasttime='$lasttime' where id='$id' limit 1");
}
//函数MemberConnect_ResetVar在/e/memberconnect/memberconnectfun.php
//重置变量
function MemberConnect_ResetVar(){
	$_SESSION['state']='';
	$_SESSION['openid']='';
	$_SESSION['apptype']='';
	$_SESSION['openidkey']='';
	//自定义增加的会话数据
	$_SESSION['nickname']='';
	$_SESSION['userpic']='';
}
//函数printerrortourl在/e/class/connect.php
//直接转向
function printerrortourl($gotourl='',$error='',$sec=0){
	global $empire,$editor,$public_r,$ecms_config;
	echo'<meta http-equiv="refresh" content="'.$sec.';url='.$gotourl.'">'.$error;
	db_close();
	$empire=null;
	exit();
}
?>
顶部中部底部