1. 程式人生 > >destoon php 後臺郵箱(手機) 驗證碼驗證(可用於註冊)

destoon php 後臺郵箱(手機) 驗證碼驗證(可用於註冊)

驗證碼傳送到郵件 或 手機

① .web前 ajax 

function Dcode(i) {
    $.post('login.php', {'action':'send'}, function(data) {
        if(data == 'ok') {
            if(!i) Dtoast('Send successful');
            Dtimer();
        } else if(data == 'max') {
            Dtoast('Number of sending too much, please wait for site audit');
            Go('index.php?reload={$DT_TIME}');
        } else {
            Dtoast('Send failure, please try again');
        }
    });
}

php:

case 'send':
	//傳送驗證碼
		(isset($_SESSION['m_name']) && check_name($_SESSION['m_name'])) or exit('ko');
		$username = $_SESSION['m_name'];
		if($verify_type == 'mobile') {
			$t = $db->get_one("SELECT mobile,groupid FROM {$DT_PRE}member WHERE username='$username'");
			$t or exit('ko');
			$t['groupid'] == 4 or exit('ko');
			is_mobile($t['mobile']) or exit('ko');
			$mobile = $t['mobile'];
			isset($_SESSION['mobile_send']) or $_SESSION['mobile_send'] = 0;
			isset($_SESSION['mobile_time']) or $_SESSION['mobile_time'] = 0;
			if($_SESSION['mobile_time'] && $DT_TIME - $_SESSION['mobile_time'] < 180) exit('ko');
			if($_SESSION['mobile_send'] > 4) exit('max');
			if(max_sms($mobile)) exit('max');
			$mobilecode = random(6, '0123456789');
			$_SESSION['mobile'] = $mobile;
			$_SESSION['mobile_code'] = md5($mobile.'|'.$mobilecode.'|RM');
			$_SESSION['mobile_time'] = $DT_TIME;
			$_SESSION['mobile_send'] = $_SESSION['mobile_send'] + 1;
			$content = lang('sms->sms_code', array($mobilecode, $MOD['auth_days']*10)).$DT['sms_sign'];
			send_sms($mobile, $content);
			exit('ok');
		} else if($verify_type == 'email') {
			$t = $db->get_one("SELECT email,groupid FROM {$DT_PRE}member WHERE username='$username'");
			$t or exit('ko');
			$t['groupid'] == 4 or exit('ko');
			is_email($t['email']) or exit('ko');
			$email = $t['email'];
			isset($_SESSION['email_send']) or $_SESSION['email_send'] = 0;
			isset($_SESSION['email_time']) or $_SESSION['email_time'] = 0;
			if($_SESSION['email_time'] && $DT_TIME - $_SESSION['email_time'] < 60) exit('ko'.($DT_TIME - $_SESSION['email_time']));
			if($_SESSION['email_send'] > 9) exit('max');
			$emailcode = random(6, '0123456789');
			$_SESSION['email'] = $email;
			$_SESSION['email_code'] = md5($email.'|'.$emailcode.'|RE');
			$_SESSION['email_time'] = $DT_TIME;
			$_SESSION['email_send'] = $_SESSION['email_send'] + 1;
			$title = $L['register_msg_emailcode'];
			$content = ob_template('emailcode', 'mail');
			send_mail($email, $title, stripslashes($content));
			exit('ok');
		}
		exit('ko');
	break;

②. 網站前臺驗證操作

類似介面如下:

web前端:

function Dverify() {
    var val,len;
    val = $('#code').val();
    if(!$('#code').val().match(/^[a-z0-9]{6}$/)) {
        Dtoast('Please fill in the verification code you received');
        return false;
    }
    $.post('login.php', {'action':'verify','code':$('#code').val()}, function(data) {
        if(data == 'ok') {
            Dtoast('Registration Successful');
            setTimeout(function() {
                Go('my.php?reload={$DT_TIME}');
            }, 1000);
        } else {
            Dtoast('Authentication Failed');
        }
    });
    return;
}

php 後臺處理:

	//驗證操作
	case 'verify':
		(isset($_SESSION['m_name']) && check_name($_SESSION['m_name'])) or exit('ko1');
		$username = $_SESSION['m_name'];
		isset($code) or $code = '';
		preg_match("/^[0-9]{6}$/", $code) or exit('ko2');
		$t = $db->get_one("SELECT email,mobile,groupid,regid FROM {$DT_PRE}member WHERE username='$username'");
		$t or exit('ko3');
		// exit(print_r($_SESSION['email_code']));//004917063e6bcceb397a437c193cabc71
		// exit(print_r(md5($t['email'].'|'.$code.'|RE')));//004917063e6bcceb397a437c193cabc71
		$t['groupid'] == 4 or exit('ko4');
		if($verify_type == 'mobile') {
			$_SESSION['mobile_code'] == md5($t['mobile'].'|'.$code.'|RM') or exit('ko5');
		} else if($verify_type == 'email') {
			$_SESSION['email_code'] == md5($t['email'].'|'.$code.'|RE') or exit('ko6');
		}
		$db->query("UPDATE {$DT_PRE}member SET groupid='$t[regid]',".($verify_type == 'mobile' ? 'vmobile' : 'vemail')."=1 WHERE username='$username'");
		$db->query("UPDATE {$DT_PRE}company SET groupid='$t[regid]' WHERE username='$username'");
		require DT_ROOT.'/module/member/member.class.php';
		$do = new member;
		$user = $do->login($username, '', 0, true);
		if($user) {
			$post = $user;
			$post['password'] = $_SESSION['m_pass'];
			if($MOD['welcome_sms'] && is_mobile($post['mobile'])) {
				$message = lang('sms->wel_reg', array($post['truename'], $DT['sitename'], $post['username'], $post['password']));
				$message = strip_sms($message);
				send_sms($post['mobile'], $message);
			}
			if($MOD['welcome_message'] || $MOD['welcome_email']) {
				$title = $L['register_msg_welcome'];
				$content = ob_template('welcome', 'mail');
				if($MOD['welcome_message']) send_message($username, $title, $content);
				if($MOD['welcome_email'] && $DT['mail_type'] != 'close') send_mail($post['email'], $title, $content);
			}
			session_destroy();
		}
		exit('ok');
	break;