在使用邮箱进行注册验证、密码找回的时候,会向用户的邮箱发送验证码,然后通过比对用户邮箱的验证码来php后端发送后保存的验证码进行注册状态认证,密码找回等功能。想问的是php向用户邮箱发送的验证码是保存在哪里的呢?是mysql数据库、redis数据库、session还是其他的方式。
在使用邮箱进行注册验证、密码找回的时候,会向用户的邮箱发送验证码,然后通过比对用户邮箱的验证码来php后端发送后保存的验证码进行注册状态认证,密码找回等功能。想问的是php向用户邮箱发送的验证码是保存在哪里的呢?是mysql数据库、redis数据库、session还是其他的方式。
一般都存在数据库,在发送验证码的时候写入数据库等,并且cron任务(云监控也行,规定时间清理过期验证码),用户验证操作完后更新字段值(比如改完密码了,update set validate=false ...或者直接delete这行),
不推荐存在session,因为换个浏览器或者关闭浏览器就失效了,体验极差(我的小站就是用这方式,有时候验证码发送慢了点直接无效,需要设置php.ini把session 生命周期改大点,当然也可以设置缓存,不推荐不推荐)
小站用MySQL。
这个问题,得根据你应用的场景需求出发吧,一般找回密码发送的验证码,验证码都会有过期的时间,比如10-15分钟验证码就失效,而不是一直有效,这样安全系数就会降低。所以,一般使用 cookie memcache redis来做存储都是可以,如果需要长期不过期,就使用mysql来存储,但是这个方式不建议
最简单的就是存在session里 但是多服务器的情况下涉及到session共享 这时候可以选择redis memcache这样的nosql 也可以选择mysql 推荐使用nosql 正常情况下内存要比磁盘快 也可以直接修改php.ini的配置把session的驱动修改为redis即可
2 回答2.5k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
2 回答556 阅读✓ 已解决
1 回答858 阅读✓ 已解决
951 阅读
2 回答592 阅读
1 回答697 阅读
发送验证码以后,允许用户可以在另外的页面进行下一步操作,那么就可能会是另外一个session,所以保存在同一个session不合适。
发送验证码以后,也允许用户有一定的操作时限,比如24小时内有效。那就得保障用户24小时内输入同一个验证码,必须能用。一般 redis 只是作为缓冲数据库,不进行持久化,重启会导致保存的数据丢失,大量的缓冲数据也可能会覆盖旧的数据,那验证码的可用性也得不到保障。
所以,保存在一个能够持久话的数据库里,才是比较稳妥的办法。Mysql 是可以的,当然Redis也能持久化