【发布时间】:2018-03-27 09:50:25
【问题描述】:
我正在为我的一个 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。
【问题讨论】:
-
它以何种格式存储在您的数据库中?最后的
a让我很困惑,MySQL 日期通常以 24 小时格式存储。 -
如果您在表字段中输入 DATETIME,那么为了比较日期,您需要更改数据库字段的格式
-
@ThomasEdwards 他们被存储为 VARCHARS
-
var_dump($row['expiry']);的输出是什么? -
考虑将它们作为日期存储在 MySQL 中,以便它们以日期格式到达,而不是再次转换它们。