2017-08-13 14 views
-1

私はこの問題に直面していましたが、これは頻繁に質問されていますが、問題は私が行った研究で修正されていません。サーブレット:ログイン試行がデクリメントに失敗しました

私が直面している問題は、同じユーザー名で2回ログインしようとすると、試行回数が減るという論理を作ったということです。しかし、それは常に2のままです。

私は基本的にこれを行いました:ページの訪問回数をカウントするのにHttpSessionを使ってみましたが失敗しました。私はそれを私のログインページにリダイレクトするたびにそれを感じます。セッションを再開するだけです。

私の初期の計画は、JDBCコードで、ユーザが3回以上ログインしようとするとuser_acc == 1をブロックするということです。しかし、私が直面している大きな問題を見て、データベースに接続せずに入力フィールドからユーザー名を取るだけの基本的なロジックを用意することにしました。私はこれを修正した後、データベースに接続するように変更します。

本当にありがとうございます。

String name = request.getParameter("username"); 
String pass = request.getParameter("password"); 
PrintWriter pw = response.getWriter(); 
int login_attempt = 3; 

HttpSession session=request.getSession(); 
session.setAttribute("name",name); 
String sessionName = (String) session.getAttribute("name"); 

if(name.equals("scott")){ 

    if(pass.equals("abc")) 
    { 
    pw.println(("Success")); 
    pw.println(sessionName); 
    } 
    else { 
     login_attempt = login_attempt - 1; 
     if(login_attempt < 3 && sessionName.equals(name)){ 
      pw.println(" You have this try " + login_attempt + " : " + sessionName); 
     } else if(login_attempt == 0 && sessionName.equals(name)){ 
      pw.println("Please contact admin for as your account is blocked"); 
     } 

    } 
} 

は他人の利益のために を解決し、私は他人の利益のために解決この問題

int loginAttempt; 
if (session.getAttribute("loginCount") == null) { 
    // This will first set login count to zero 
    session.setAttribute("loginCount", 0); 
    loginAttempt = 0; 
} else { 
    loginAttempt = (Integer) session.getAttribute("loginCount"); 
    // System.out.println("How many attempt " + loginAttempt); 
} 

if (loginAttempt == 3) { 
    session.setMaxInactiveInterval(5); 

    System.out.println(("game over")); 
    pw.println("No more attempt please call admin\n\n"); 
    pw.println("<br/> \n\n\n\n\n\n   left for interval"); 

} else { 
    System.out.println("How many attempt " + loginAttempt); 
    // loginAttempt = loginAttempt + 1; 
    loginAttempt++; 
    int allowLogin = 3 - loginAttempt; 



    session.setAttribute("message", "loginAttempt= " + loginAttempt 
      + ". Invalid username or password. You have " + allowLogin + " attempts remaining."); 
    System.out.println(session.getAttribute("message")); 
    response.sendRedirect("login.jsp"); 
} 

if (isTrue != false) { 
    pw.println("Username does not exist in database"); 
} 

session.setAttribute("loginCount", loginAttempt); 
pw.println("Invalid users"); 
+0

これを解決しましたコードは不完全です。私はいくつかのクラスにあると思います。変数login_attemptはローカルであり、ショットごとに復元されます –

+0

セッションとして保存するユーザー名と、間違ったパスワードでログインページにリダイレクトするときの比較にはあまり意味がありません。失敗したログインに基づいてユーザ名を認識し、それに応じて試行を減らします。何か案が? –

+0

あなた自身の問題を解決した場合は、**回答**として投稿して、質問に編集しないでください。あなたの質問からソリューションを削除し、回答として投稿してください。 –

答えて

1

を解決した、私はこの問題

int loginAttempt; 
if (session.getAttribute("loginCount") == null) { 
    // This will first set login count to zero 
    session.setAttribute("loginCount", 0); 
    loginAttempt = 0; 
} else { 
    loginAttempt = (Integer) session.getAttribute("loginCount"); 
    // System.out.println("How many attempt " + loginAttempt); 
} 

if (loginAttempt == 3) { 
    session.setMaxInactiveInterval(5); 

    System.out.println(("game over")); 
    pw.println("No more attempt please call admin\n\n"); 
    pw.println("<br/> \n\n\n\n\n\n   left for interval"); 

} else { 
    System.out.println("How many attempt " + loginAttempt); 
    // loginAttempt = loginAttempt + 1; 
    loginAttempt++; 
    int allowLogin = 3 - loginAttempt; 



    session.setAttribute("message", "loginAttempt= " + loginAttempt 
      + ". Invalid username or password. You have " + allowLogin + " attempts remaining."); 
    System.out.println(session.getAttribute("message")); 
    response.sendRedirect("login.jsp"); 
} 

if (isTrue != false) { 
    pw.println("Username does not exist in database"); 
} 

session.setAttribute("loginCount", loginAttempt); 
pw.println("Invalid users"); 
関連する問題