我正在为PHP中的一个小项目编写令牌认证系统。向脚本发出请求,然后脚本生成令牌并将其存储到当前时间为+2分钟的到期日期的数据库中。
然后有另一个脚本在其请求中获取令牌,检查它是否有效且令牌是否已过期。这是我陷入困境的地方。我无法成功地比较两个日期,即使条件应该是真的,但事实并非如此。
以下是我将时间插入数据库的方法;
// Now, we want to gen the token.
$token = randomKey(20);
// Current time + 2 minutes
$time = date("m/d/Y h:i:sa", time() + 120);
// Insert the token into the DB
$obj->query("INSERT INTO `tokens`(`username`, `token`, `expiry`) VALUES ('$uid', '$token', '$time')");
以下是我尝试比较它们的方法;
if(strtotime($row['expiry']) < strtotime(date("m/d/Y h:i:sa")))
无论如何,即使将db中的时间更改为过去的某一天,此条件也始终为false。
答案 0 :(得分:2)
它的错误,因为它的数字格式不正确。
尝试做回音日期(“m / d / Y h:i”,日期(“m / d / Y h:i:sa”,时间());
您将收到错误。
为什么不使用unix时间戳来插入数据库并稍后读取?这么容易。
$time = date("U") + 120;
// Do DB insert....
if($row['expiry'] < date("U")){
// Do something...
}