<?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(); } ?>