0

このログイン ページを 2 回ロードする必要があります。つまり、最初にユーザーがユーザー名とパスワードを入力し、サーブレットから応答を取得すると、「メッセージ」を含むログイン jsp ページにリダイレクトされます。

ログインとログアウト用の 2 つのボタンがあります。私が試したように、カウント変数を使用してこのスクリプトを2回ロードできますか? 他の方法も優先されます。

別の問題: 各ページでユーザーが有効かどうかを確認できるように、ログインが成功した後にのみセッションを開始することはできますか?

PS: and を使用getAttributeしてみsetAttributeましたが、機能しません。

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

Login.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

私が見ることができる 1 つの問題は、あなたの .jsp ページで、 ではなく に実際に存在するオブジェクトのmessageおよびcount属性を探していることです。したがって、次のように変更します。requestsessionrequest

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 ユーザーがサーバーにリクエストを送信するとすぐに、新しいセッションが作成されます (以前のセッションが存在しない場合)。したがって、セッションの作成を防ぐ方法はありません。

また、ログインが失敗した場合は、いくつかの良いことのためにセッションを使用できます。たとえば、セッションにログイン試行回数を保存し、ログイン情報を確認する前と比較することで、何度か失敗した後、ユーザーを最大ログイン試行回数に制限できます。maximum login attempts allowed

于 2013-08-22T09:00:22.397 に答える