std::time() 及其对夏令时的依赖

std::time() and its dependence on daylight saving

我有一个要求,如果在 15 分钟内连续 3 次登录尝试失败,则锁定用户。如果第三次登录尝试失败,我将使用以下公式进行检查。

    if (first_login_attemp_time + 900 <= std::time(nullptr))
    {
        lockuser();
    }

如果第一次登录尝试失败,我设置first_login_attemp_time如下

first_login_attemp_time = std::time(nullptr)

如果在 15 分钟内发生夏令时更改,此代码是否有效?window? 我应该考虑其他的夏令时吗?

std::time returns UTC 时间不遵循地方当局的夏令时政策。所以关于夏令时不用担心。

正如引用的参考文章所说,大多数系统都按照 POSIX 标准实施 std::time_t(即 std::time returns)。根据我的经验,这是我所知道的所有系统。因此它极有可能以秒为单位成为整数值,因此您的 + 900 结果提前 15 分钟。

但是你的代码逻辑很奇怪。它会在自第一次尝试后超过 15 分钟后锁定用户,这通常不是所谓的“15 分钟内”。