1. 前言
当前互联网的应用场景越来越多,其中就包含各种网站和APP。而在这些应用中,用户登录验证是非常重要且常用的功能。而在手机APP中,为提高用户的登录体验感,手机验证登录已经流行起来,因此,本文将介绍如何使用PHP实现手机验证登录的功能。
2. 实现步骤
2.1. 获取验证码
手机验证登录的一个重要步骤是获取验证码。获取验证码的方式有多种,这里介绍获取短信验证码的方式。
首先,需要引入短信管理平台提供的SDK(Software Development Kit)。这里以阿里大于(阿里云短信服务提供商)为例,引入声明如下:
require_once 'alidayu/TopSdk.php';
date_default_timezone_set('Asia/Shanghai');
接着,需要设置相关参数:
//设置appkey和secret
$c = new TopClient;
$c->appkey = 'appkey';
$c->secretKey = 'secret';
$req = new AlibabaAliqinFcSmsNumSendRequest;
//短信类型,传入值请填写normal
$req->setSmsType("normal");
//签名名称,需要在阿里大于管理中创建
$req->setSmsFreeSignName("登录验证");
//接收短信的手机号码
$req->setRecNum("手机号码");
//短信模板ID,需要在阿里大于管理中创建
$req->setSmsTemplateCode("SMS_5044823");
//短信中的参数,由验证码组成
$random = mt_rand(1000, 9999);
$req->setSmsParam("{\"code\":\"$random\"}");
//执行发送
$resp = $c->execute($req);
其中,appkey和secret需要在阿里大于中进行创建,而短信模板也需要事先创建好。
2.2. 验证码的存储
接下来需要将验证码存储在服务器中,此处可以使用Session或者Redis存储。因为Session存储在服务器本地,扩展性较差,而Redis通过网络连接存储,扩展性更好,因此本文选择使用Redis存储验证码。
首先需要在PHP中引入Redis:
$redis = new Redis();
$redis->connect('localhost', 6379);
然后可以将验证码存储于Redis中:
$redis->set('key', 'value');
//设置过期时间为10分钟
$redis->expire('key', 600);
2.3. 验证码的校验
当用户输入完验证码后,需要将用户输入的验证码和服务器存储的验证码进行校验。校验的方式也可以使用Session或Redis,这里仍然使用Redis来进行校验:
//获取用户输入的验证码
$code = $_POST['code'];
//获取服务器存储的验证码
$redis_code = $redis->get('key');
if($code == $redis_code) {
//验证成功
} else {
//验证失败
}
2.4. 登录成功的处理
当用户输入验证码并验证成功后,需要进行登录处理。一般情况下,需要将用户信息存储于Session或者数据库。
2.5. 安全性处理
使用手机验证登录的方式,需要注意其安全问题。因为验证码的有效期比较短,所以需要设置一定的防刷策略,避免用户通过利用程序进行暴力破解的方式获取验证码。此处可以通过限制用户在一定时间内获取验证码的次数,或者同时开启人机验证(验证码+滑动控件)。
3. 注意事项
3.1. 验证码的有效期
验证码的有效期需要根据实际业务场景来进行设定。一般来说,60秒至5分钟是比较合适的设置。但是在特殊情况下,可适当设置较长的验证码有效期,比如过年期间,出差等情况下,用户的手机信号不稳定,如果验证码有效期设置过短,容易造成用户无法及时接收到验证码。
3.2. 防刷策略的设置
如前所说,使用手机验证登录的方式需要设置一定的防刷策略。因为不论是短信API还是人机验证API都需要一定的成本,如果不加限制,容易造成恶意刷取。
3.3. 数据库字段的设置
在使用手机验证登录的过程中,建议在数据库中设置一个字段,用于标记用户的登录方式。比如,默认是用户密码登录,当用户使用验证码登录时,将此字段设置为“code”或其他标记值,方便后续根据登录方式进行处理。
4. 总结
使用PHP实现手机验证登录功能需要注意验证码获取、存储、校验、登录处理和安全性处理等多个方面,正确设置和处理这些方面才能保证使用手机验证登录的功能实现的正确性和安全性。
另外,本文举例使用的是阿里大于短信API,但是其他短信API使用方式类似,读者可根据实际情况进行选择。同时也可以使用国内其他短信API如腾讯云短信、七牛云短信等。