实现邮箱激活账号功能

原文地址:http://blog.sina.com.cn/s/blog_636ed7d00100nss0.html

        我们在注册大型网站的时候,比如像新浪,阿里巴巴网站的时候,填写完注册信息后,都会给用户的邮箱发送一个激活注册账号的邮件,让我们激活,然后才可以使用,那么这么做的好处是什么呢,个人认为有下面两个好处:

  1.  诚心会员,可以保证不是恶意注册,都是一些希望体验网站的用户注册的
  2.  防注入,注册机注入有时候我们很难防住它,所以我们可以通过这种方法来分清哪些是用户注册,哪些是注册机注入,对于注册机注入的数据,我们定期删除就可以了

那么怎么样去实现这种功能呢,思路大概是这样的:

        1.数据库表中添加一个激活的状态字段0或1 (0为未激活,1未激活),在添加一个验证码字段validateCode,最后在添加一个注册时间字段addTime
        2.程序中,注册页面添加注册信息,随机生成注册验证码添加到数据库中,越复杂越好,然后对验证码进行加密,把用户id或者UserName和加过密的验证码作为参数发送到   邮箱中(有的时候只把验证码发送到邮箱,然后找到有没有匹配的,然后修改状态,我感觉这样不太好,防止有相同的验证码出现,所以最好在加一个参数)
        3.发送到邮箱里以后,用户可以点击进行确认,这里有时间限制,比如48小时之内未能通过注册,则失效,只能重新注册,激活链接只能使用一次,一次后也将失效
        4.处理页面中,首先验证链接是否过期,将注册的时间与当前的时间作比较,如果超过时间则提示验证码过期,重新注册或者重新发送验证码,然后再判断链接是否用过,只能使用一次,这个只要判断数据库中的验证码是否为空即可,验证都通过以后,根据id或userName从数据库中取回验证码与链接中的验证码作比较,通过了,修改状态为1,即启用,然后将注册码清空,转到登陆或者首页,否则提示验证失败!
        5.为了方便是否进行邮箱验证的转换,可以在web.config中配置信息<appSetting key=”IsValidate” value=“0” />然后在注册的时候判断一下即可!
        6.为了防注册机注入,我们要判断邮箱的唯一性,要不然他们会伪造一个邮箱激活

代码如下:

数据库中加三个自段:时间addData,随机验证码validataCode,用户状态UserState

Random random = new Random();string checkCode = "";for (int i = 0; i <= 4; i++){int num = random.Next(1, 10);checkCode += num.ToString();}string validataCode = FormsAuthentication.HashPasswordForStoringInConfigFile(checkCode, "md5");user.validateCode = validataCode;string strSmtpServer = "smtp.163.com";string strFrom = "";string strFromPass = ""string strto = user.email;string strSubject = "账号激活";System.Text.StringBuilder strBody = new System.Text.StringBuilder();strBody.Append("点击下面链接激活账号,48小时生效,否则重新注册账号,链接只能使用一次,请尽快激活!</br>");strBody.Append("<a href='http://localhost:2493/web/Operate.aspx?userName=" + user.userName + "&validateCode=" + user.validateCode + "'>点击这里</a></br>");strBody.Append("如未能激活请点击下面链接:<a href='http://localhost:2493/web/Operate.aspx?userName=" + user.userName + "&validateCode=" + user.validateCode + "'>http://localhost:2493/web/Operate.aspx?userName=" + user.userName + "&validateCode=" + user.validateCode + "</a></br>");SendSMTPEMail(strSmtpServer, strFrom, strFromPass, strto, strSubject, strBody.ToString());//发送邮件public void SendSMTPEMail(string strSmtpServer, string strFrom, string strFromPass, string strto, string strSubject, string strBody){System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient(strSmtpServer);client.UseDefaultCredentials = false;client.Credentials =new System.Net.NetworkCredential(strFrom, strFromPass);client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage(strFrom, strto, strSubject, strBody);message.BodyEncoding = System.Text.Encoding.UTF8;message.IsBodyHtml = true;client.Send(message);}
发送到邮箱里的邮件:


点击链接进入到处理页面operate.aspx

protected void Page_Load(object sender, EventArgs e){if(!IsPostBack){if (Request.QueryString["userName"] != null && Request.QueryString["validateCode"]!=null){string userName = Request.QueryString["userName"].ToString();string validateCode = Request.QueryString["validateCode"].ToString();operateLink(userName, validateCode);}}}public void operateLink(string userName,string validateCode){User user = OperateData.GetUserByUserName(userName);if (user == null){lblAlert.Text = "该注册信息已不存在,验证失败";}else{//验证过期DateTime ZCTime = user.addData;DateTime NowTime = DateTime.Now;TimeSpan time1 = new TimeSpan(ZCTime.Ticks);TimeSpan time2 = new TimeSpan(NowTime.Ticks);string diff = time2.Subtract(time1).TotalHours.ToString();double time = Convert.ToDouble(diff);//验证是否过期if(time>48){lblAlert.Text = "验证码已经过期,验证失败";return;}//验证链接是否用过if(user.validateCode==""){lblAlert.Text = "已经验证过了,请返回到登录页面,登录体验吧";return;}//验证激活账号,修改账号状态if(validateCode==user.validateCode){OperateData.UpdateValidateCode(user.id);lblAlert.Text = "验证成功,请返回到登录页面,登录体验吧";}}}

这样以来,邮箱激活账号的基本功能就实现了,有什么意见大家可以提提!


注:

参考这篇文章的思路,自己用Java实现了一下,

博客地址:http://blog.csdn.net/jolingogo/article/details/8591197


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/26592.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

别把 OpenAI 太当回事,它远未达到替换前端的地步

最近几个月&#xff0c;我和很多初入行的开发人员交谈&#xff0c;他们对AI越来越感到焦虑。他们看到像GPT-4这样的工具展示的越来越令人印象深刻的演示&#xff0c;担心等他们掌握了HTML/CSS/JS&#xff0c;就没有任何工作机会了。这种情绪现在在Twitter上广泛存在&#xff1a…

AI 时代,知识工作者的生存指南

最近&#xff0c;大家可能已经见识过 AI 的威力了吧&#xff0c;以 ChatGPT 为代表的 人工智能&#xff08;AI&#xff09;展现出接近人一样的回答水准。 来自 Craft AI Assitant AI 就在那里&#xff0c;是房间里的大象&#xff0c;大家不能总装做对自己没有影响。要知道&…

这 13 种职业用AI提效的 40 类场景盘点

随着人工智能技术的发展&#xff0c;职业领域出现了诸如我们“小蜜蜂助手Beezy”等神奇的工具&#xff0c;大幅度提升了各行各业里从业人员的工作效率。 笔者今天将详述13种常见职业&#xff0c;分别是如何利用这些工具在实际工作过程中来帮助自己提升效率的。大量干货和私藏宝…

【猫娘小可爱频道】闲聊+1

本篇是居士养的一只喵&#xff0c;看了一个视频后的观后感&#xff0c;视频已附在文章末尾&#xff0c;可点击小程序观看。 欢迎大家讨论~ 喵喵看这个视频突然产生的一个想法&#xff0c;是比较有实感的感觉到了时间的美感或者四维时间轴对事物的影响。就是有时候很美的东西是某…

文心一言实际测试——让我们拿实际说好坏

文心一言实际测试——让我们拿实际说好坏 4月16日&#xff0c;文心一言闪亮登场&#xff0c;就关于大家最关心的几个问题&#xff0c;让我们一起来看看效果吧~ 创作能力&#xff1a; 听说飞桨高校领航团缺少一个slogan&#xff0c;让我们听听文心一言怎么说 “聚焦科研&am…

网络编程的开始(猫娘和汪君的凄美爱情故事)

现在让我们&#xff08;快乐的&#xff09;来学习java中的网络编程 &#xff08;猫娘和汪君在最后&#xff09; 一、认识InetAddress 1.首先通过查阅API帮助文档 我们知道&#xff0c;InetAddress是net包下的一个类&#xff0c;表示互联网协议&#xff08;IP&#xff09;地址。…

IT 领导者揭示了对 ChatGPT 的网络恐惧

根据黑莓的最新研究&#xff0c;大多数(51%)安全领导者预计ChatGPT将在一年内成为成功的网络攻击的核心。 对北美、英国和澳大利亚的1500名IT决策者的调查还发现&#xff0c;71%的人认为民族国家可能已经将该技术用于针对其他国家的恶意目的。 ChatGPT是由OpenAI开发的人工…

一群中国芯片技术小球的奋斗故事系列:“中科融合的AI-3D芯片追赶美国德州仪器DLP技术之产业和技术初探-part III”

引子 2023年初春&#xff0c;冬雪未化&#xff0c;ChatGPT和GPT4一声惊雷&#xff0c;以颠覆的表现震惊全球&#xff0c;被称之为AI的“iPhone时刻”。微软全线产品迅速导入&#xff0c;生产力工具与搜索&#xff0c;经过了30年&#xff0c;再次分久必合&#xff01;全世界人民…

干货!来自北大、KAUST、斯坦福、达摩院的大模型前沿动态:表格推理、代码生成、MiniGPT-4、生成式推理...

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; ChatGPT的发布使得国内外众多的研究机构掀起了一股AI热潮&#xff0c;而这也进一步推动了人们对大语言模型的深入研究。2023年4月26日&#xff0c;AI TIME举办的大模型专场四活动邀请了阿里巴巴达摩院NLP研究员…

5月25日活动报名 | 与五位来自AI产业和开发者工具服务领域的大咖一起思辨代码自动生成...

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 10年内AI会淘汰程序员这个职业么&#xff1f; AI技术的发展已经给我们带来了很多的变化&#xff0c;尤其是在计算机编程领域&#xff0c;基于大模型能力的代码生成工具在这1年来得到了越来越多的关注&#xff0…

永远年轻,永远在路上的AI TIME

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 在2019年的智源人工智能大会上&#xff0c;我第一次接触AI TIME&#xff0c;时至今日&#xff0c;加入AI TIME已经四年了。在过去的四年里&#xff0c;AI技术、产业发生了翻天覆地的变化&#xff0c;我自己的思…

除了AIGC,2023年还要面临哪些技术“双刃剑”?

最近两个月&#xff0c;人们惊叹于AIGC的“超能力”&#xff0c;但也对AIGC带来的潜在风险表示担忧。ChatGPT之父Sam Altman在最近的一次访谈中表示&#xff0c;AI在为人类的聪明才智提供力量倍增器的同时&#xff0c;也可能带来技术滥用、事故等安全风险。他重点指出「恶意人员…

生成式AI火爆全球,你是否已经做好了准备?

2023年&#xff0c;随着ChatGPT的火爆全球&#xff0c;生成式AI也引发了各界人士的广泛关注。一时间&#xff0c;从国际科技巨头到国内人工智能企业&#xff0c;几乎所有我们耳熟能详的科技公司&#xff0c;都纷纷杀入了生成式AI市场。 作为全球云计算技术的开创者和领导者&…

面对AI“龙卷风”破坏力 白宫“软着陆”欧盟“硬防御”

ChatGPT的风靡与风险将OpenAI的CEO山姆奥特曼&#xff08;Sam Altman&#xff09;送进白宫&#xff0c;他被蹲守在美国总统府邸的记者们围追&#xff0c;面对5月4日白宫发起的AI风险治理会议&#xff0c;奥特曼很官方地给出“重要也很及时”的回应&#xff0c;自信的反复强调“…

QQGC?揭秘QQ的AI绘画大模型技术

&#x1f449;腾小云导读 2022年来&#xff0c;AIGC概念迅速出圈并快速形成产业生态&#xff0c;成为继PGC、UGC之后新的数字内容创作形式。QQ影像中心提出了自研的AI画画技术方案——QQGC&#xff0c;本文将介绍在QQGC基础大模型训练中的实践和探索&#xff0c;接着往下看吧~ …

Worldcoin,大众的加密货币还是个人的数字身份?

2022年8月&#xff0c;在印度班加罗尔一间大学的教室里&#xff0c;摩西•阿莫得&#xff08;Moiz Ahmed&#xff09;举起一个排球大小、中间有一个玻璃开口的铬合金球。阿莫得向学生们解释说&#xff0c;如果用这个叫做“Orb”的设备扫描他们的虹膜&#xff0c;他们将获得25个…

UML统一建模语言(UML类图)

UML统一建模语言 UMLUML类图类图的作用类的表示方法 类与类之间关系的表示方式关联关系单向关联双向关联自关联 聚合关系组合关系依赖关系继承关系&#xff08;泛化关系&#xff09;实现关系 UML 统一建模语言(Unified Modeling Language&#xff0c;UML&#xff09;是用来设计…

用StartUML生成GoF设计模式类图与代码(c++)

先介绍一下startUML StarUML&#xff08;http://www.staruml.com&#xff09;的前身是Plastic&#xff0c;从1996年开始开发。1998年开始&#xff0c;Plastic转变为UML建模工具。2005年改名为StarUML&#xff0c;最新版本StarUML 5.0已经是一款功能全面的产品&#xff0c;支持…

详解GMM高斯混合模型EM模型

一般讲到GMM就会讲到EM。 我不过多的介绍EM算法。这里只是举一些例子来看看真实的GMM怎么用EM算的。 一、GMM的作用 记住GMM的作用&#xff0c;就是聚类&#xff01; 二、GMM有hard和soft两种 hard-GMM和soft-GMM是为了对标k-means和soft k-means。在中文互联网上搜索到的GM…

UML建模及starUML使用

1、UML关系 1.1 六种关系图例 在UML类图中&#xff0c;常见的有以下几种关系: 泛化&#xff08;Generalization&#xff09;, 实现&#xff08;Realization&#xff09;&#xff0c;关联&#xff08;Association)&#xff0c;聚合&#xff08;Aggregation&#xff09;&#x…