手机验证码、邮箱验证设计思路以及实现

手机验证码、邮箱验证设计思路以及实现。

通过session实现。

1.点击获取验证码,并记录时间

//生成随机数
public static String generatedVcode() {
String vcode = “”;
for (int i = 0; i < 6; i++) {
vcode = vcode + (int) (Math.random() * 9);
}
return vcode;
}
//将随机数、当前时间放在session中

HttpSession session = request.getSession(false);
SimpleDateFormat df = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);//设置日期格式
session.setAttribute(“verifycode”, verifycode);
String senddate = df.format(new Date());
session.setAttribute(“senddate”, senddate);

//验证
HttpSession session = request.getSession(false);
String senddate = (String)session.getAttribute(“senddate”);
String code = request.getParameter(“verifycode”);
Long secends = Tool.diferentSecend(gaindate, senddate);
public static long diferentSecend(String date1, String date2) {
long secend = 0;
/*
* date1 = “2008-10-13 18:35:00”; date2 = “2008-10-12 18:35:00”;
*/

	String pattern = "yyyy-MM-dd HH:mm:ss";
	SimpleDateFormat sf = new SimpleDateFormat(pattern);
	try {
		Date d1 = sf.parse(date1);
		Date d2 = sf.parse(date2);
		if(d1.getTime() > d2.getTime()) {
			secend = (d1.getTime() - d2.getTime()) / 1000;
		}else {
			secend = (d2.getTime() - d1.getTime()) / 1000;
		}
	}catch(ParseException e) {
		e.printStackTrace();
	}
	System.out.println("一天秒数" + secend);
	return secend;
}

//如果超出有效期,则从session中将数据移除
if(secends > lvaliddate) {
session.removeAttribute(“verifycode”);
session.removeAttribute(“senddate”);
}
// 如果在有效内,验证码校验
String verifycode = (String)session.getAttribute(“verifycode”);//session中的验证码

String code = request.getParameter(“verifycode”);//客户端传递过来的值

if(code.equals(verifycode)) {
//校验成功
}else{
//校验失败
}
//session知识补充
getSession(boolean create)意思是返回当前reqeust中的HttpSession ,如果当前reqeust中的HttpSession 为null,
当create为true,就创建一个新的Session,否则返回null;
简而言之:
HttpServletRequest.getSession(ture)等同于 HttpServletRequest.getSession()
HttpServletRequest.getSession(false)等同于 如果当前Session没有就为null;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现这个功能需要涉及到前端和后端的交互,包括发送邮件、验证验证码等步骤。下面是一个简单的实现思路: 1. 前端页面设计设计一个注册页面,包括输入邮箱验证码和密码等表单项,以及一个发送验证码的按钮。 2. 前端发送验证码请求:当用户输入邮箱后,点击发送验证码按钮,前端需要向后端发送一个请求,请求中包含用户输入的邮箱地址。 3. 后端生成验证码:后端接收到前端的请求后,需要生成一个随机的验证码,并将验证码与邮箱地址存储在一个字典中。 4. 后端发送邮件:后端使用SMTP协议向用户提供的邮箱地址发送邮件,邮件内容为生成的验证码。 5. 前端验证验证码:当用户输入验证码后,前端需要向后端发送一个请求,请求中包含用户输入的验证码和邮箱地址。 6. 后端验证验证码:后端接收到前端的请求后,需要从字典中获取对应的验证码,并与用户输入的验证码进行比较,验证是否一致。 7. 后端保存用户信息:如果验证码一致,后端将用户输入的邮箱地址和密码等信息保存到数据库中。 下面是一个简单的示例代码,其中使用了Flask框架和Flask-Mail扩展库,需要先安装Flask和Flask-Mail: ```python from flask import Flask, request, jsonify, render_template from flask_mail import Mail, Message import random app = Flask(__name__) # 邮件配置 app.config['MAIL_SERVER'] = 'smtp.qq.com' app.config['MAIL_PORT'] = 465 app.config['MAIL_USE_SSL'] = True app.config['MAIL_USERNAME'] = '你的QQ邮箱' app.config['MAIL_PASSWORD'] = '你的QQ邮箱授权码' mail = Mail(app) # 验证码字典,用于存储邮箱地址和验证码 code_dict = {} @app.route('/') def index(): return render_template('register.html') @app.route('/send_code', methods=['POST']) def send_code(): email = request.form.get('email') if not email: return jsonify({'code': 1, 'msg': '邮箱不能为空'}) # 生成随机验证码 code = random.randint(100000, 999999) code_dict[email] = str(code) # 发送邮件 msg = Message(subject='验证码', recipients=[email]) msg.body = '您的验证码为:{}'.format(code) mail.send(msg) return jsonify({'code': 0, 'msg': '验证码已发送'}) @app.route('/register', methods=['POST']) def register(): email = request.form.get('email') code = request.form.get('code') password = request.form.get('password') if not email or not code or not password: return jsonify({'code': 1, 'msg': '请填写完整信息'}) # 验证验证码 if email not in code_dict or code_dict[email] != code: return jsonify({'code': 1, 'msg': '验证码错误'}) # 保存用户信息到数据库中 # ... return jsonify({'code': 0, 'msg': '注册成功'}) if __name__ == '__main__': app.run() ``` 在上面的代码中,我们定义了三个路由函数,分别处理首页、发送验证码和注册请求。其中,`send_code`函数用于处理发送验证码请求,首先从请求中获取邮箱地址,然后生成一个随机的验证码,并将邮箱地址和验证码存储在`code_dict`字典中。接着使用Flask-Mail扩展库发送邮件,邮件内容为生成的验证码。 `register`函数用于处理注册请求,从请求中获取邮箱地址、验证码和密码等信息,然后验证验证码是否正确,最后将用户信息保存到数据库中(这里只是一个示例,没有实现具体的保存操作)。 在前端页面中,需要使用Ajax技术与后端进行交互,以下是一个简单的示例代码: ```html <!DOCTYPE html> <html> <head> <title>注册</title> <meta charset="utf-8"> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script> </head> <body> <form> <div> <label>邮箱:</label> <input type="email" name="email" required> </div> <div> <label>验证码:</label> <input type="text" name="code" required> <button type="button" id="send_code">发送验证码</button> </div> <div> <label>密码:</label> <input type="password" name="password" required> </div> <div> <button type="submit">注册</button> </div> </form> <script> $(function() { // 发送验证码按钮点击事件 $('#send_code').click(function() { var email = $('input[name="email"]').val(); $.post('/send_code', {'email': email}, function(data) { alert(data.msg); }); }); // 注册表单提交事件 $('form').submit(function() { var email = $('input[name="email"]').val(); var code = $('input[name="code"]').val(); var password = $('input[name="password"]').val(); $.post('/register', {'email': email, 'code': code, 'password': password}, function(data) { alert(data.msg); }); return false; }); }); </script> </body> </html> ``` 在上面的代码中,我们使用了jQuery库简化了与后端的交互,点击发送验证码按钮时向`/send_code`路由发送POST请求,注册表单提交时向`/register`路由发送POST请求,然后根据后端返回的数据弹出提示框。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值