0

我希望我的这个登录页面加载两次,即第一次用户输入用户名和密码,然后从 servlet 获得响应,然后它将被重定向到带有“消息”的登录 jsp 页面。

我有两个用于登录和注销的按钮。这个脚本可以像我尝试过的那样使用计数变量加载两次吗?任何其他方法也将是优选的。

另一个问题:我可以在登录成功后才开始会话,以便我可以检查每个页面上的用户是否有效?

PS:我尝试过使用getAttributesetAttribute但它们不起作用。

if(userExists) {
    // check if password matches username or not
    if (pwd.equals(rs.getString("password"))) {
        System.out.println("Login Successful");
        message = "ValidUser";
    } else {
        message = "Invalid Password";
        System.out.println("Invalid Password from userExists");
    }
} else {
    message = "Invalid Username";
    System.out.println("Invalid Username");
}
request.getSession().setAttribute("message", message);
request.getSession().setAttribute("count", count); // count = 1;
response.sendRedirect(dest);  // dest ==> same login.jsp page

登录.jsp:-

<script type="text/javascript">
    var msg = <%= request.getAttribute("message") %>;
    var cnt = <%= request.getAttribute("count") %>;
    function log() {
        if (cnt != 1) {
            // document.userlogin.login.type = "submit";
            alert("Form Submitted");
            alert("count is " + cnt);
            alert("msg = " + msg);
        } else {
            document.userlogin.login.type = "button";
            if (msg == "ValidUser") {
                document.userlogin.login.disabled = true;
                document.userlogin.logout.disabled = false;
            } else if (msg == "Invalid Password") {
                alert("Invalid Password");
                document.userlogin.userpass.focus();
            } else if (msg == "Invalid Username") {
                alert("Invalid Username/ Please register and then login");
                document.userlogin.username.focus();
            } else {
                alert("msg = " + msg);
            }
        }
    }
</script>

<form name="userlogin" method="POST" action="../Login" onload="log();" >
4

1 回答 1

0

我可以看到的一个问题是,在您的 .jsp 页面中,您正在寻找对象中的messagecount属性,这些属性request实际上存在于.jspsessionrequest。所以改变以下:

var msg = '<%= request.getAttribute("message") %>'; // Here session needs to be checked
var cnt = '<%= request.getAttribute("count") %>';  // Here session needs to be checked

从 jsp 中的隐式会话对象中获取属性。

var msg = '<%= session.getAttribute("message")%>';
var cnt = parseInt(<%= session.getAttribute("count")%>);

另一个问题can i have a session start only after login successfull so that i can check if user is valid or not at each page 一旦用户向服务器发出请求,就会创建一个新会话(如果以前的会话不存在)。所以没有办法阻止创建会话。

此外,如果登录失败,您可以将会话用于几个 googd 的事情,例如您可以通过在会话中存储登录尝试次数并将其与检查登录信息之前进行比较,将用户限制为多次失败后的最大登录尝试次数。maximum login attempts allowed

于 2013-08-22T09:00:22.397 回答