今天项目里有这样的要求:用户注册的时候 要填写邮箱。忘记密码 的时候,发送指定的邮箱,在邮件中一个有效时间为一个小时的链接,点击这个链接,可以更改密码。在网上搜索到一些资料,将思路整理如下。
首先建一张表ab,存放用户名、URL信息和创建URL时间。邮件发送的URL一定是唯一的。可以通过发送时间和用户ID组合起来MD5 32位或64位加密来生成唯一ID。(用UUID生成也可,保证唯一性就OK。)
假设生成的URL地址是http://www.test.com/forgotPassword.html?ABID=91bfc6feb8987aaa21fe369bab4d4fde",表的URL信息存的是ABID,同时将生成的ABID和用户名存入数据库中,以便以后查询。然后在验证的页面是forgotPassword.jsp中写方法接受ABID的参数。通过URL查询数据库中ab表中是否存在该参数。如果有,取出用户名并跳至密码设置页面。当然,有的用户可能重复多次发送,或着有验证时间限制,在ab表中有字段创建时间,判断是否已经过期之类的。