тайм-аут значения сеанса - PullRequest
0 голосов
/ 26 июля 2011

Я создаю сайт со страницей входа в систему и хочу запретить пользователю вход в систему после 5 попыток неудачи в течение 20 минут может быть, один из способов это

const int maxTryCount = 5;
const int minutesToSuspend = 20;

[HttpPost]
    public ActionResult Index(PeopleAccount account, string returnUrl)
    {
        if (Session["TimeStamp"] == null || ((DateTime)Session["TimeStamp"]).AddMinutes(minutesToSuspend) <= DateTime.Now)
        {
            PeopleAccountService service = new PeopleAccountService();
            DataSet ds = service.Authentication(account.UserName, account.Password, null, null);

            if (ds.Tables[1].Rows.Count > 0)
            {
                FormsAuthentication.SetAuthCookie(account.UserName, false);
                Session.Clear();
                Session["UserAccressibility"] = ds.Tables[0];
                Session["UserFullName"] = ds.Tables[1].Rows[0][0];

                if (returnUrl != null && returnUrl.Length > 1 && returnUrl.StartsWith("/") && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
                    return Redirect(returnUrl);
                return RedirectToAction("Index", "Stuff", null);
            }
            else
            {
                Session["TryCount"] = (Session["TryCount"] == null
                                       || (Session["TimeStamp"] != null && ((DateTime)Session["TimeStamp"]).AddMinutes(minutesToSuspend) <= DateTime.Now)) ?
                                        1 : ((int)Session["TryCount"]) + 1;

                if ((int)Session["TryCount"] > maxTryCount)
                {
                    Session["TimeStamp"] = DateTime.Now;
                    return Redirect("~/UnauthorizedAccess/Index");
                }

                ModelState.AddModelError("", Paymankaran.Content.Messages.InvalidUsernameAndOrPassword);
                ModelState.AddModelError("", string.Format(Paymankaran.Content.Messages.TryCountWarning,
                                                            Session["TryCount"], maxTryCount, minutesToSuspend));
                return View();
            }
        }

        return Redirect("~/UnauthorizedAccess/Index");
    }
}

фактически я использую переменные Session ["TimeStamp"] и Session ["TryCount"] для реализации этой функциональности Есть ли лучший или более безопасный способ? это хороший способ для достижения этой функциональности?

1 Ответ

1 голос
/ 26 июля 2011

Использование провайдера членства в Asp.net предоставит вам эту функцию (и многое другое) бесплатно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...