2011-07-26 28 views
0

私は、ログインページでサイトを構築し、5トライは20分 のために失敗した後、ログインからユーザーを防ぐためにしたいのです多分1つの方法は、このセッション値のタイムアウト

ある
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"); 
    } 
} 

実際に私がセッションを使用しています[」 TimeStamp "]およびSession [" TryCount "]変数を使用して、この機能を実装します。 より安全な方法がありますか? これはこの機能を実現する良い方法ですか?

答えて

関連する問題