我正在尝试解决这个业务问题:
- 用户每 5 分钟尝试登录 10 次
- 如果用户尝试超过 10 次,我会显示“您需要等待 登录”消息
- 5 分钟过去后,我需要重置尝试次数 并让用户再尝试 10 次。
我想在不使用 Timer
的情况下执行此操作,并且我将大部分信息存储在 Session
public class LoginExp
{
public DateTime FirstAttempt;
public int NumOfAttempts;
}
我在页面加载时存储 FirstAttempt
日期时间。
在登录按钮上单击:
- 我递增
NumOfAttempts
- 我需要检查 NumOfAttempts < 10 在 相同的 5 分钟时间段内。我可以得到
FirstAttempt
和DateTime.Now
之间经过的分钟数,并做 5 的模数,但这不会告诉我这是在哪个时间段(在其他换句话说,用户可能在第 2 分钟尝试了 3 次,然后在第 7 分钟回来再次尝试。mod
会给我相同的值。
关于如何做到这一点有什么想法吗?
最佳答案
请不要使用计时器。为这些数据和用户数据留出空间,以便持久保存,其中存储了某种形式的凭据。只需保留上次登录尝试时间和尝试次数 - 如果时间大于 n,则下一次尝试会清除之前的计数并从 0 开始,依此类推。
关于c# - 如何在 C# 中解决此时隙问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13199729/