Java Servlet:登录尝试无法递减

Java Servlet:登录尝试无法递减,java,jsp,servlets,jdbc,Java,Jsp,Servlets,Jdbc,我一直面临着这个问题,我知道这是一个经常被问到的问题,但我所做的研究并没有纠正这个问题 我面临的问题是,我创建了这样一个逻辑:如果同一个用户名尝试登录2次,那么应该减少尝试次数。但是,它总是停留在不尝试2 我基本上是这样做的:我尝试使用HttpSession计算页面上的访问次数,但失败了。因为我觉得,每当我把它重定向到我的登录页面。它将重新启动会话 我最初的计划是,在我的JDBC代码中,如果用户尝试登录超过3次,它将阻止用户\u acc==1。但考虑到我面临的主要问题,我决定使用基本逻辑,只从输

我一直面临着这个问题,我知道这是一个经常被问到的问题,但我所做的研究并没有纠正这个问题

我面临的问题是,我创建了这样一个逻辑:如果同一个用户名尝试登录2次,那么应该减少尝试次数。但是,它总是停留在不尝试2

我基本上是这样做的:我尝试使用HttpSession计算页面上的访问次数,但失败了。因为我觉得,每当我把它重定向到我的登录页面。它将重新启动会话

我最初的计划是,在我的JDBC代码中,如果用户尝试登录超过3次,它将阻止
用户\u 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");
        }

    }
} 
String name=request.getParameter(“用户名”);
String pass=request.getParameter(“密码”);
PrintWriter pw=response.getWriter();
int login_尝试=3;
HttpSession session=request.getSession();
session.setAttribute(“name”,name);
String sessionName=(String)session.getAttribute(“名称”);
如果(名称等于(“斯科特”)){
如果(通过等于(“abc”))
{
pw.println((“成功”);
pw.println(会话名称);
}
否则{
登录尝试=登录尝试-1;
if(登录尝试<3&&sessionName.equals(name)){
println(“您有这个try”+登录尝试+:“+会话名);
}else if(登录尝试==0&&sessionName.equals(name)){
println(“由于您的帐户被阻止,请联系管理员”);
}
}
} 
已解决 为了他人的利益,我解决了这个问题

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");
int-loginatest;
if(session.getAttribute(“loginCount”)==null){
//这将首先将登录计数设置为零
session.setAttribute(“loginCount”,0);
loginattent=0;
}否则{
LoginAttest=(整数)session.getAttribute(“loginCount”);
//System.out.println(“尝试次数”+登录尝试次数);
}
如果(LoginAttest==3){
session.setMaxInactivativeInterval(5);
System.out.println((“游戏结束”);
println(“不再尝试请致电管理员\n\n”);
pw.println(“
\n\n\n\n\n\n留给间隔”); }否则{ System.out.println(“尝试次数”+登录尝试次数); //loginattent=loginattent+1; LoginAttest++; int allowLogin=3-登录尝试; session.setAttribute(“message”,“loginattent=“+loginattent +“。无效的用户名或密码。您还有”+allowLogin+”次尝试。”); System.out.println(session.getAttribute(“消息”); sendRedirect(“login.jsp”); } if(isTrue!=false){ println(“数据库中不存在用户名”); } session.setAttribute(“loginCount”,loginattest); pw.println(“无效用户”);
为了他人的利益,我已经解决了这个问题

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");
int-loginatest;
if(session.getAttribute(“loginCount”)==null){
//这将首先将登录计数设置为零
session.setAttribute(“loginCount”,0);
loginattent=0;
}否则{
LoginAttest=(整数)session.getAttribute(“loginCount”);
//System.out.println(“尝试次数”+登录尝试次数);
}
如果(LoginAttest==3){
session.setMaxInactivativeInterval(5);
System.out.println((“游戏结束”);
println(“不再尝试请致电管理员\n\n”);
pw.println(“
\n\n\n\n\n\n留给间隔”); }否则{ System.out.println(“尝试次数”+登录尝试次数); //loginattent=loginattent+1; LoginAttest++; int allowLogin=3-登录尝试; session.setAttribute(“message”,“loginattent=“+loginattent +“。无效的用户名或密码。您还有”+allowLogin+”次尝试。”); System.out.println(session.getAttribute(“消息”); sendRedirect(“login.jsp”); } if(isTrue!=false){ println(“数据库中不存在用户名”); } session.setAttribute(“loginCount”,loginattest); pw.println(“无效用户”);
此代码不完整。我猜他在某个班。变量login\u尝试是本地的,并且每次快照都会恢复。我不太明白为什么要比较用户名以将其存储为会话,以及当它使用错误的密码重定向到登录页面时。它将根据失败的登录识别用户名,并相应地减少尝试次数。有什么想法吗。我刚刚做了。:)@马克·罗特维尔