用户注册,登陆等等需要验证码,下面的方案是,请求验证码生成一个随机验证码,存在code中,identity可以存储来源IP/手机号码/Cookie等等用户校验, 5分钟内如果没有被使用就会删除,如果5分钟内被使用也会删除。type 可以存放www,user,bbs,admin.....等等,将所有验证码放在captcha表中统一管理。
这个方案主要是考虑没有memcache/redis/apc/xcache等等缓存环境下的解决方案,你也可以将下表改造一下,增加ttl字段用于存放生存时间,而不是采用5分钟一刀切的方案。
CREATE TABLE `captcha` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `type` ENUM('user','admin') NOT NULL DEFAULT 'admin' COMMENT '验证码类型', `identity` VARCHAR(32) NOT NULL COMMENT '唯一身份识别md5摘要', `code` VARCHAR(6) NOT NULL COMMENT '验证码', `ctime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`), UNIQUE INDEX `code` (`code`), UNIQUE INDEX `identity` (`identity`) ) COMMENT='验证码' COLLATE='utf8_general_ci' ENGINE=InnoDB;
CREATE EVENT `captcha` ON SCHEDULE EVERY 5 MINUTE STARTS '2013-07-08 16:27:03' ON COMPLETION PRESERVE ENABLE COMMENT '' DO BEGIN delete from captcha where type='myid' and ctime < DATE_ADD(now(), INTERVAL -5 MINUTE); END
原文出处:Netkiller 系列 手札
本文作者:陈景峯
转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。