2017-12-03 8 views
0

私はログイン機能を作っていますが、ユーザーが3回の試行で間違った情報を入力した場合、ロックアウトを含めてブランクパネルに持ち込み、ログイン部分を取り除きます。私はカウンターを使用していますが、動作していないようです。私は間違った情報を入力した場合、それは私がlblInfo2は私に試行数を表示していますが、それは常に1のまま、私は間違った情報を入力したが、私はAsp C#カウンタが動作しない

<asp:Panel ID="panel2" runat="server" Wrap="true" Visible="false"> 
     <h2 id="logError" runat="server" visible="false">Error logging in</h2> 
     <strong>Username</strong><asp:TextBox runat="server" ID="loginName"></asp:TextBox><br /> 
     <strong>Password</strong><asp:TextBox runat="server" TextMode="Password" ID="loginPass"></asp:TextBox> <br /> 
     <asp:Button runat="server" Text="Return" OnClick="ReturnMain" /> 
     <asp:Button runat="server" Text="Log in" OnClick="login" /><br /> 
     <asp:Label ID="lblInfo2" runat="server"></asp:Label> 
    </asp:Panel> 

public void login(Object src, EventArgs e) 
    { 
     get_connection(); 
     try 
     { 
      connection.Open(); 
      command = new SqlCommand("SELECT * FROM subscribers WHERE Email [email protected] and Password = @Password", connection); 
      command.Parameters.AddWithValue("@Email", loginName.Text); 
      command.Parameters.AddWithValue("@Password", loginPass.Text); 
      //Session["User"] = loginName.Text; 
      //Session["Number"] = attempt; 
      int attempt = 0; 


      reader = command.ExecuteReader(); 

      if (reader.HasRows) 
      { 
       //notification that the user has logged in 
       YouHaveLoggedIn.Visible = true; 
       panel1.Visible = false; 
       panel2.Visible = false; 
       panel6.Visible = true; 
       WishPanel.Visible = true; 
      } 
      else 
      { 
       attempt++; 
       lblInfo2.Text = "Attempt count: " + attempt; 

       logError.Visible = true; 
       if (attempt >= 3) // lockout function but does not work, unsure why 
       { 
        lockedOut.Visible = true; 
        panel2.Visible = false; 
       } 
      } 

      reader.Close(); 
     } 
     catch (Exception err) 
     { 
      //user did not log in successfully 
      lblInfo2.Text = "Error reading the database. "; 
      lblInfo2.Text += err.Message; 
     } 
     finally 
     { 
      //lblInfo.Text = "good connect. "; 
      connection.Close(); 
     } 

    } 

をロックアウトされません。私に言うだろう、それは私の問題ですもしelse文?

+0

リクエストの間に「試行」を継続していると思いますか? –

答えて

0

あなたattempt変数は、試行の実数を意味し、あなたのlogin方法、内のローカル変数は常にあなたがログインしよう0毎回でているので、ユーザはなるだろう最大の試みはあなたが必要とする1

です要求間の試行回数を保持するために、あなたはこれらのいずれかの方法でそれを行うことができます。

  1. ストアセッション内のアカウント(メール)あたりの試行回数(悪い アイデア)
  2. ストア数データベース内の試行の数(良いアイデア)

2を選択した場合、「30分後にユーザーは再度ログインを再試行できます」というようにdatetimeを保存することもできます。

+0

私は実際にセッションを使用しなければならないので、試行部分を追加するためにデータベースを編集することはできません。私がセッションを利用するなら、それはこのようなものでしょうか?セッション["試行"] =試行; –

+0

同様に:セッション[電子メール+ "#attempts"]ユーザーが別のアカウント(電子メール)を試みる場合 – Haytam

+0

カウンタはまだ5 –

0

ユーザのログイン失敗回数を保持するサブスクライバテーブルに新しいカラムを作成できませんか。 カウンタをセッションに入れるという考えは、ユーザーが失敗したログインを試行してブラウザを閉じて、新しいセッションで再度ログインすることができるため、悪いことです。だから毎回、カウンターは新しいセッションごとにリセットされます。 失敗したログインのカウンターをどこかに保存する必要があります(セッションはしないでください)。 もう1つの悪い方法は、このカウンタをテキストファイルに保存することです。 サーバー上の各ユーザーのテキストファイルを作成し、失敗したログインのカウンタをこのテキストファイルに置き、失敗した試行ごとに更新します。

関連する問題