其实原理很简单,你说自动生成URL那一步不会,首先URL分为两部分:
第一部分是一个验证地址并且带一个标识用户id的参数,比如:http://www.xxx.com/active.php?uid=1
第二部分其实就是一个用来验证的字符串,比如:authcode=asdad1f323ff43f
合起来就是http://www.xxx.com/active.php?uid=1&authcode=asdad1f323ff43f
第一部分是你来决定的,active.php就是你写的那个做验证脚本,所以你可以知道地址了?
第二部分不就是个随机生成的字符串吗?你可以用:md5(自己的域名+时间戳+验证的用户名)这个公式来生成这个串。当然你可以自己定义如何组合这个串,只要保证他们不是有规律让人一下猜到的,也别重复的就可以。
很简单是吗?
至于何时生成,何时验证,你可以这样设计:
你可以在用户表中,加两个字段:1 (bool isActive)用户是否已激活,默认为false。2 (string authcode)临时激活码。
当用户注册后,或点击激活按钮后,就执行你的一个脚本:
1 生成激活码,就是我上面说的方法。
2 将这个激活码,存储这个激活码到用户表的authcode字段。
3 将你的完整激活地址,用邮件发送到用户的邮箱
4 你的那个脚本,在接收到请求时,将两个参数取下来去用户表中搜索uid=1的用户的authcode是否与数据库中的相等,如果相等,验证通过,并清空update isActive字段为true,authcode字段更新为空。
就是这样,当然,为了避免生成了重复的验证码和别人的猜解,你可以给authcode设置超时时间。这个有很多种做法,你可以给用户表再加个字段是一个时间戳,用当前时间戳+有效的时间戳期限,比如time()+3600,这个就是一个小时的超时时间,验证时,你可以同时再比对下是否在这个时间戳之内。这种东西,你也可以放在缓存或内存中。这样会更好。
你可能还需要做一个开关,也许你今天想让新注册的用户都需要邮件激活,而明天也许你又不想了。用来控制,是否需要邮件激活。首先判断这个值为true的话,所有注册用户的isActive都为false,否则都为true。
php注册时候邮箱验证的原理
原创
©著作权归作者所有:来自51CTO博客作者yang名扬的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
springBoot实现邮箱的发送
springBoot简单发送邮箱
验证码 redis 发送邮件 -
java邮箱 验证 java邮箱注册功能
register.html 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="utf-8"> 5 <title>注册</title> 6
java邮箱 验证 javascript css elementui jquery