1

我使用以下字段保存用户登录信息:

用户 ID、登录日期、登录时间、状态

每次尝试登录后,一条记录将使用真假状态插入数据库。如果他/她在过去 3 分钟内有 3 次登录失败,我想锁定用户。所以我需要使用当前时间并以分钟格式计算它与表的最后 3 条记录的差异。

我的问题是:
1- 这次计算哪个更好?PHP 还是 MySQL?
2-取决于您的建议,哪个功能更适合它?

谢谢你。

4

4 回答 4

1

以下查询根据您的条件返回所有 User_Id:

select user_id from t 
where login_date= CURDATE() 
      and login_time>TIMESTAMPADD(MINUTE,-3,CURTIME())
      and status = 'f'
group by user_id 
having count(*)>3
于 2012-12-05T09:17:34.297 回答
0

不同的用法。如果我是你,我会在数据库中记录上次失败的登录日期和时间,这样你就可以从数据库中获取上次失败的登录时间以及数据库中的用户数据。

在 PHP 或 MySQL 中进行比较是可以的。

但是,您应该记住 MySQL 服务器和 Web 服务器应该具有相同的时区并且时间应该同步,否则您的结果将不准确。

于 2012-12-05T09:09:37.890 回答
0

考虑到你还需要做很多其他的事情,我说使用 php。当他尝试使用登录时,您可以检索用户的最后 3 条记录

SELECT login_date, login_time, status FROM table WHERE user_id=$id ORDER BY login_DATE DESC LIMIT 3

然后在 PHP 中您可以进行检查。如果失败,您仍然需要通知用户他被锁定,锁定用户(其他表?)并返回 false 进行登录。

在php中你可以做一些检查,比如

  • 是否返回了树尝试(少即无锁)
  • 最后检索到的记录是否少于 3 分钟?(否则不锁)
  • 让所有树返回值错误尝试(否则不锁定)
  • 等等
于 2012-12-05T09:10:04.757 回答
0
  1. 我认为 MySQL 总是一个更好的计算解决方案,因为它比 PHP 快得多。
  2. 如果您使用时间戳,您可以简单地执行 time_x - time_y 以获得以秒为单位的差异,您的总计算将是: (time_x - time_y) / 60 并且您的查询将如下所示:

    SELECT user_id, login_date, login_time, status, ((login_time-NOW()) / 60) as differenceColomn FROM usertable

于 2012-12-05T09:10:47.790 回答