如何在C#中解决这个时间段问题

前端之家收集整理的这篇文章主要介绍了如何在C#中解决这个时间段问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试解决此业务问题:

>用户每5分钟尝试登录10次
>如果用户超过10次尝试,我会显示“您需要等待
登录“消息
>一旦经过5分钟,我需要重置尝试次数
并让用户再尝试10次.

我想在不使用Timer的情况下这样做,我将大部分信息存储在Session中

public class LoginExp
{
  public DateTime FirstAttempt;
  public int NumOfAttempts;
}

我将FirstAttempt DateTime存储在页面加载上.

在“登录”按钮上单击:

>我增加了NumOfAttempts
>我需要检查NumOfAttempts< 10在相同的5分钟时间段内.我可以获得FirstAttempt和DateTime.Now之间经过的分钟数并且做5的mod,但是这不会告诉我这个时间段(换句话说,用户可能在第2分钟尝试了3次)然后在第7分钟回来再次尝试.这个mod会给我相同的价值.
有关如何做到这一点的任何想法?

解决方法

您可以存储尝试时间戳列表,并使用它来确定用户是否被锁定.这不是完整的代码,但这是基本的想法:
// Store a list of attempts
var attempts = new List<DateTime>();

// Determine if 10 or more attempts have been made in the last 5 minutes
bool lockout = attempts.Where(a => (DateTime.Now - a).TotalMinutes <= 5).Count() >= 10;

// Register an attempt
attempts.Add(DateTime.Now);

// Remove attempts older than 5 minutes
attempts.Where(a => (DateTime.Now - a).TotalMinutes > 5).ToList()
    .ForEach(a => attempts.Remove(a));

您还可以将尝试存储在数据库中,这样可以为您提供安全性的papertrail.同样的方法适用 – 计算不到5分钟的记录.

猜你在找的C#相关文章