本帖最后由 dongdong0925 于 2011-7-31 13:15 编辑
当后台开启新用户注册验证后,可以设置不受新用户注册验证限制的地区列表和不受新用户注册验证限制的 IP 列表,如图。
当用户注册的IP或者所在地在这个后台设置的列表中的话,就忽略验证直接注册成功,否则需要进行相应验证。
代码分析:
在source\class\class_member.php文件中,在311行附近找到如下代码
- if($this->setting['regverify']) {
- if($this->setting['areaverifywhite']) {
- $location = $whitearea = '';
- $location = trim(convertip($_G['clientip'], "./"));
- if($location) {
- $whitearea = preg_quote(trim($this->setting['areaverifywhite']), '/');
- $whitearea = str_replace(array("\\*"), array('.*'), $whitearea);
- $whitearea = '.*'.$whitearea.'.*';
- $whitearea = '/^('.str_replace(array("\r\n", ' '), array('.*|.*', ''), $whitearea).')$/i';
- if(@preg_match($whitearea, $location)) {
- $this->setting['regverify'] = 0;
- }
- }
- }
- if($_G['cache']['ipctrl']['ipverifywhite']) {
- foreach(explode("\n", $_G['cache']['ipctrl']['ipverifywhite']) as $ctrlip) {
- if(preg_match("/^(".preg_quote(($ctrlip = trim($ctrlip)), '/').")/", $_G['clientip'])) {
- $this->setting['regverify'] = 0;
- break;
- }
- }
- }
- }
复制代码 $this->setting['regverify']为后台设置的新用户注册验证的方式。
0为不需要验证,1为Email 验证,2为人工审核。
不受限制地区分析:
$this->setting['areaverifywhite']为后台设置的不受新用户注册验证限制的地区列表。
- $location = trim(convertip($_G['clientip'], "./"));
复制代码 $_G['clientip']为当前用户的IP。
$location为当前访问的IP的所在地。
- if($location) {
- $whitearea = preg_quote(trim($this->setting['areaverifywhite']), '/');
- $whitearea = str_replace(array("\\*"), array('.*'), $whitearea);
- $whitearea = '.*'.$whitearea.'.*';
- $whitearea = '/^('.str_replace(array("\r\n", ' '), array('.*|.*', ''), $whitearea).')$/i';
- if(@preg_match($whitearea, $location)) {
- $this->setting['regverify'] = 0;
- }
- }
复制代码 $whitearea为后台设置的不受限制地区的匹配数组。
如果存在$location,同时$location可以匹配到$whitearea中任意一项,就将$this->setting['regverify']赋为0(无需进行验证)。
不受限制IP分析:
- if($_G['cache']['ipctrl']['ipverifywhite']) {
- foreach(explode("\n", $_G['cache']['ipctrl']['ipverifywhite']) as $ctrlip) {
- if(preg_match("/^(".preg_quote(($ctrlip = trim($ctrlip)), '/').")/", $_G['clientip'])) {
- $this->setting['regverify'] = 0;
- break;
- }
- }
- }
复制代码
$_G['cache']['ipctrl']['ipverifywhite']为后台设置的不受新用户注册验证限制的 IP 列表。
如果后台设置了不受新用户注册验证限制的 IP 列表,同时当前IP可以匹配到后台设置的任意不受限制IP,就将$this->setting['regverify']赋为0(无需进行验证)。
|