日期:2014-05-17  浏览次数:20428 次

如何生成“密码重置”那种“一次性链接”
RT. 
就像一些网站用来给忘记密码的用户,提供的密码重置的链接。

发到用户注册邮箱里的那种,只能触发一次,用过一次以后就不能用了。

有时候还有时间限制,比如24小时内链接有效之类的。

谁知道 这个用 PHP 如何实现呢。  

谢谢啦

------解决方案--------------------
时间轴控制。先生成连接,记录生成时间,然后设置死亡时间。超过24小时或者点击过一次后就over
------解决方案--------------------
根据时间戳什么的生成可逆加密串 取得后再进行还原验证 验证时间是否超时就可以了.
------解决方案--------------------
要实现一次性的话那就得把加密串记录下来了,每次收到连接请求 到记录里面查询一下
------解决方案--------------------
“一次性”???
很简单,你只需查询一下表,在表中就通过,否则就拒绝

表中只需一个字段 char(32) 设为主键
只存放需要验证内容的 MD5 值
操作也很简单,执行 delete from tbl_name where key='值'
如果 mysql_affected_rows 返回 0 就表示未通过

这个方案可以验证任何“一次性”,只要你取得要验证对象的MD5。无需顾忌验证对象的真实内容
------解决方案--------------------
扯淡.

点重置密码,你就给数据库插一行,有自增ID做KEY,并且有用户名,是否完成验证,创建日期TIME_STAMP,唯一标示符md5. (为了数据库安全性,生成一个MD5值作标识发给用户,md5(id . username . time))。
然后发个URL在邮件里:xxxx.com?id=md5即可。

用户访问这个url的时候从数据库里找该md5,标记完成即可。
------解决方案--------------------
=。= 还用表? 这种数据记录下来貌似是给dba找麻烦呀...

随便用 username + unixtimestamp + 一段key 然后对某几位进行一下哈希不就行了?....

验证超时的时候,提取出unixtimestamp字段,就可以随意做时间限制了...
------解决方案--------------------
我说说我的思路。其实很简单
因为SESSION是有生命期的,SESSION过期同时链接自动过期即可。
思路:
确定用户身份后。利用session ID+用户名 生成一个唯一的标识
PHP code

$_SESSION['FORGET_CODE']=md5(session_id() . 'XXX');        //XXX是要重置密码的用户名
/*生成的链接如下*/
$href="http://www.domain.com/forget.php?code={$_SESSION['FORGET_CODE']}";

------解决方案--------------------
1,可以把用户的申请时间记录到数据库中
2,使用能解密的算法,把时间也做为数据加密,discuz有这种方法。