我正在尝试创建一个忘记密码功能,该功能将使x小时后创建的链接失效。因此,当用户请求重置密码时,我将time()
数据存储在数据库值中。那我怎么能过期呢?
答案 0 :(得分:1)
三个选项:
像:
$now = time();
$sk = sh1($user_id . $now . "yoursupersalthere")
$link = "http://www.example.com/forgot.php?id={$user_id}&ts={$now}&sk={$sk}"
这将是您发送给用户的链接。然后进行检查
$ts = $_GET['ts'];
$user = $_GET['id'];
$sk = $_GET['sk'];
if (!$sk == sh1($user_id . $now . "yoursupersalthere")) {
die("bad signature");
}
elseif (time() - $ts > 3600 /* or put your expiration limit */) {
die('link expired');
}
// do your job
答案 1 :(得分:0)
你可能有一个带有重置链接的表条目,只需添加一个日期字段,然后包含一个WHERE expiredate<NOW()
或者用一个简单的DELETE from table WHERE expiredata<NOW()
不时清理表格
答案 2 :(得分:0)
执行此操作的一种方法是在单击链接时检查链接是否过期 - 某些伪代码:
// when the link is clicked pull the information from the database and get the time
// SQL goes here
// this will give you the difference in seconds
$diff = time() - $timestamp_from_db;
// we'll pretend the time expires in 8 hours
$expires_in = 8 * 60 * 60;
// for this example we'll pretend the expiration is 8 hours
if($diff <= $expires_in)
{
// has not been more then 8 hours
}
else
{
// has been more then 8 hours
}
答案 3 :(得分:0)
保持表清洁的最佳方法是实现以下目的:
帐户ID上的UNIQUE索引可确保人们无法在到期时间内请求多次重置。