1

私は MVC フレームワークを使用してプロジェクトを作成しています。複数のページでセッションを作成し、すべてのページにアンカー タグが表示され (ログアウト)、ユーザーを最初のページ (ログイン ページ) にリダイレクトします。私がやろうとしているのは、ユーザーがログインページにリダイレクトされたときに、既存のセッションが存在するかどうかを確認し、存在する場合はセッションを無効にし、ユーザーは再度ログインする必要があることです。しかし、ユーザー名/パスワードを入力せずに送信をクリックすると、セッションを無効にした後、コードが機能しません。古い値が引き続き使用されます...どこが間違っているのか教えてください??

         <jsp:useBean id="theBean" class="pack.java.MyModel"/>
        <jsp:setProperty name="theBean" property="name" param="userName"/>
         <jsp:setProperty name="theBean" property="pass" param="userPass"/>
         <%@ taglib uri="/WEB-INF/jsp2/taglib1.tld" prefix="easy" %>
         <html>
        <head>

        </head>
        <body >
        <form  method="post">
        <h1>Login please</h1>
        Enter username : <input type = text  name = userName  >
          </br>
        Enter password : <input type = password  name = userPass  >
       </br>
        <input type = submit name = submit value = submit>
        </br>
        <%

          HttpSession session=request.getSession(false);

        if(session!=null)
         {
          session.invalidate();
         }
          String btn = request.getParameter("submit");
         if(btn!=null)
      {
       %>

        <easy:myTag/>
       <% 

       }
       %>
    </form>
  </body>
</html>
4

2 に答える 2

2

それはフレームワークに依存します

コード

<%
session.invalidate();
%>

セッションを無効にしますが、「easy:myTag」は何をしますか?

別のページでセッションを無効にします。機能する場合は、カスタム タグ myTag を調査する必要があります。

于 2013-08-18T09:28:29.587 に答える
0

問題は、応答ヘッダーの後に無効な方法を呼び出していることです。JSP がサーブレットに変換されると、html コードはこれらのコマンド行の前にあります。<hmtl>タグの前に置いてみてください。

バックグラウンドで、システムは Cookie または添付された URL データからユーザー ID を抽出し、その ID をキーとして、以前に作成された HttpSession オブジェクトのテーブルに使用します。しかし、これはすべてプログラマに対して透過的に行われます。getSession を呼び出すだけです。着信 Cookie または添付された URL 情報にセッション ID が見つからない場合、システムは新しい空のセッションを作成します。また、Cookie が使用されている場合 (デフォルトの状況)、システムは、セッション ID を表す一意の値を持つ JSESSIONID という名前の送信 Cookie も作成します。したがって、リクエストで getSession を呼び出しても、その呼び出しがレスポンスに影響を与える可能性があります。したがって、request.getSession を呼び出すことが許可されるのは、HTTP 応答ヘッダーを設定することが正当な場合、つまり、ドキュメント コンテンツがクライアントに送信される (つまり、フラッシュまたはコミットされる) 前に限られます。

このファイルに記載されているとおり: http://www.java-programming.info/tutorial/pdf/csajsp2/08-Session-Tracking.pdf

このサイトから: http://courses.coreservlets.com/Course-Materials/csajsp2.html

より一般的な情報については:

セッションデータの破棄

ユーザーのセッション データの処理が完了したら、3 つのオプションがあります。

• サーブレットが作成したデータのみを削除します。removeAttribute("key") を呼び出して、指定されたキーに関連付けられた値を破棄できます。これは最も一般的なアプローチです。

• セッション全体を削除します (現在の Web アプリケーション内)。セッション全体を破棄するには、invalidate を呼び出します。これを行うと、サーブレットまたは JSP ページが作成したセッション データだけでなく、そのユーザーのすべてのセッション データが失われることに注意してください。そのため、Web アプリケーション内のすべてのサーブレットと JSP ページは、invalidate が呼び出される可能性があるケースについて合意する必要があります。

• ユーザーをログアウトし、そのユーザーに属するすべてのセッションを削除します。最後に、サーブレット 2.4 および JSP 2.0 をサポートするサーバーでは、logout を呼び出してクライアントを Web サーバーからログアウトし、そのユーザーに関連付けられているすべてのセッション (Web アプリケーションごとに最大 1 つ) を無効にすることができます。繰り返しますが、このアクションは自分のサーブレット以外のサーブレットに影響するため、logout コマンドの使用をサイトの他の開発者と調整してください。

于 2014-07-09T23:16:46.703 に答える