destoon php 後臺郵箱(手機) 驗證碼驗證(可用於註冊)
阿新 • • 發佈:2019-01-26
驗證碼傳送到郵件 或 手機
① .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;