1.页面一个验证码文本输入框,后面跟一个“获取验证码”按钮,同时限制按钮的点击时间,一般是限制1分钟才能点击一次
2.点击按钮,将用户ID,生成的验证码,存入数据库,接下来调用短信发送接口将信息发送出去
3.表单提交时,判断该验证码是否正确(是否在表中存在同时验证码是否失效,一般是五分钟内失效)
流程上了解了
现在不会写时间的失效限制代码
js 不是很冻
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script> <script type="text/javascript"> $(function () { $("#btnCode").click(function () { //执行获取验证码的操作 GetNumber(); }); }) var count = 5; function GetNumber() { $("#btnCode").attr("disabled", "disabled"); $("#btnCode").val(count + "秒之后点击获取") count--; if (count > 0) { setTimeout(GetNumber, 1000); } else { $("#btnCode").val("点击获取验证码"); $("#btnCode").attr("disabled", ""); } } </script> </head> <body> <form> <input id="btnCode" type="button" value="点击获取验证码"/> </form> </body> </html>
@yellowshorts:
@Rich.T: 很感谢你的代码
在页面上直接调用接口不就行了啊
1、使用一般处理文件(.ashx)生成一个字符串图片验证码返回到前端
2、在后台的时候使用Session记录这个验证码的字符串
3、当点发送的时候验证所填的验证码是否与Session相同
好像搞错了,你是想实现 发送验证码到手机,由用户接收到验证码后填入。
这样的话,服务器应该要搞个全局字典缓存,缓存电话号码和对应的验证码,并且定时进行删除过期的验证码。用户收到验证码进行确认注册的时候就在这个字典里面匹配验证。
过期的验证码要如何实现比较好
@yellowshorts:
1、全局字典是应该是key为ID,值为对象(对象包含验证码+一个时间值)
2、使用System.Threading.Timer对象。定时遍历全局对象检查是否失效,失效的移除
@滴答的雨: 我用xml来存取了
看短信接口API,我公司底层是这样的
private static string smsurl = ConfigurationManager.AppSettings["SMSUrl"];
private static string smsuser = ConfigurationManager.AppSettings["SMSUser"];
private static string smspwd = ConfigurationManager.AppSettings["SMSPwd"];
/// <summary>
/// 发送短信
/// </summary>
/// <param name="url">网关URL</param>
/// <param name="u">用户名</param>
/// <param name="p">密码</param>
/// <param name="mobile">手机号,最多100个,以“;”分割</param>
/// <param name="msg">短息内容,不超过60个字</param>
/// <param name="dtime">时间为空为立即发送,格式:2007-12-01 00:00:00</param>
/// <returns></returns>
public static string SendSMS(string mobile,string msg,string dtime)
{
string url = "{0}?uid={1}&pwd={2}&mobile={3}&msg={4}&dtime={5}";
url = String.Format(url,smsurl, smsuser, smspwd, mobile, HttpUtility.UrlEncode(msg, Encoding.GetEncoding("GB2312")), dtime);
return getContent(url);
}
private static string getContent(string Url)
{
string strResult = "";
//try
//{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
//声明一个HttpWebRequest请求
request.Timeout = 30000;
//设置连接超时时间
request.Headers.Set("Pragma", "no-cache");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream streamReceive = response.GetResponseStream();
Encoding encoding = Encoding.GetEncoding("GB2312");
StreamReader streamReader = new StreamReader(streamReceive, encoding);
strResult = streamReader.ReadToEnd();
streamReader.Close();
response.Close();
//}
//catch
//{
// throw;
//}
return strResult;
}
接口这部分我到时会写
就前台的时间限制 不懂如何操作
@yellowshorts: 我也没有短信验证这方面的经验。
我的想法是利用时间戳验证,不知道可不可以。我认为利用js验证是不合理的,客户端的都能更改。
1. 点击的时候发送一个验证码,同时在数据库记录一下发送时间 和验证码有效时间。
2. 当他发送验证码过来的时候,验证是不是在数据库记录的时间段内。
3. 同时利用数据库记录的数据,验证防止他狂点获取验证码浪费短信资源。
@truename: 谢谢你的思路哈
后来我用xml文件来存取验证码跟手机
为啥要用短信验证注册啊,感觉很奇怪.需求能写具体些吗?
之前是用验证码
现在改成用手机验证
其实短信验证码和图片验证码原理和流程都是一样的,只是展示的方式换一下而已,简单来说就是换一下UI而已,你已经拿到短信接口,那生成验证码后直接通过短信发送到手机上就可以了。
首选你看一下短信公司给的接口文档,对应着做开发,当你平台上触发了验证码直接往短信接口给的推送地址上推送,然后就是短信平台的事了,你就不用管了。当用户收到短信后短信平台 还会产品一个回执,也就是短信发送报告,会相应的推送给你,你这时候就需要按原路径做一个接收。(当然如果你不需要状态报告的话可以忽略)那么至此这个流程也就完了
才学的菜鸟,第一次做短信接口的登陆 求大神的代码
直接调用接口,或者让短信验证码商给你接入。
创蓝253就有多个语言的短信接入接口。