13
HttpSession session  = request.getSession();
try
{      
    session.removeAttribute("logonSessData");
    session.invalidate();                               
    String pageToForward = request.getContextPath();
    response.sendRedirect(pageToForward);           
}
catch (Exception sqle)
{
    System.out.println("error UserValidateServlet message : " + sqle.getMessage());
    System.out.println("error UserValidateServlet exception : " + sqle);
}

Logout サーブレットでは、上記のコードdoPostdoGetメソッドを記述しました。ログアウト後、ログイン画面が表示され、[戻る] ボタンを押すとログアウト前の前の画面が表示され、任意のページをクリックすると「HTTP ステータス 500」が表示され、押すF5とログイン サーブレットが加熱され、フル アクセスが取得されます。ユーザー。

F5戻るボタンを使用してログアウトした後、ユーザーがどのページも使用できないことを示すこの問題を停止するにはどうすればよいですか?

4

5 に答える 5

5

あなたがしていることは良いことです。ブラウザは前のページをキャッシュしており、戻るボタンをクリックすると、前にキャッシュされたページに移動します。

ブラウザがページをキャッシュできないようにする Cache ヘッダーを追加する必要があります。

Cache-Control: no-cache
于 2013-03-25T11:18:30.173 に答える
1

1)ブラウザの戻るボタンをクリックすると、ブラウザのキャッシュが原因で前のページが表示されます。

2)バッキング後に任意のページをクリックすると、セッション オブジェクトが既に無効になっているためにヌル ポインター例外が発生するため、ステータス 500 が返されます。

3)新しいリクエストがサーブレットまたはJSPに送信されると、request.getSession();メソッドが呼び出され、新しいセッションオブジェクトが作成されます。

その結果、再びすべてのページに完全にアクセスできるようになります。

この問題を回避するには、以下の手順に従ってください。

1) アプリケーションで 1 つのサーブレットを作成します。例:LoginCheckerServlet

2) 上記のサーブレットの場合、URL パターンを指定します /*

3)したがって、サーブレットはすべてのリクエストに対して実行されます

4)LoginCheckerServletリクエストパラメータでユーザー名とパスワードをチェックするようになりました

5)来ている場合はログインチェック操作を行い、ウェルカムページを表示する

6)ユーザー名・パスワードが来ない場合の意味は2つ

     i)user is already logged in 

    ii)user is trying to access your app illegally

7)request.getSession(false);セッションオブジェクトを提供するメソッドを呼び出します。このユーザーにはすでにセッションが存在するため、ユーザーを信頼してウェルカムページにリダイレクトできます。

8)request.getSession(false);このユーザーのセッションが存在しない場合、null 値が返されます。

9) リクエスト パラメータでユーザー名とパスワードを取得せず、request.getSession(false);null 値を指定している場合、ユーザーがログインせずにアプリケーションにアクセスしようとしている場合、禁止されているページを喜んで表示できます。

于 2014-06-10T11:24:25.603 に答える
0

すべてのサーブレットで、Session が null かどうかを確認します。セッションが null でない場合は、リクエスト処理のみを行い、そうでない場合はログイン ページにリダイレクトします。

HttpSession session  = request.getSession();

if(Session !=null)
{
try
{      
    // acutal servlet actions

}else
{

  // redirect to login page

 }

また、上記のコードでセッションの null チェックを追加するとよいでしょう。

HttpSession session  = request.getSession();
if(session !=null)
try
{      
    session.removeAttribute("logonSessData");
    session.invalidate();                               
    String pageToForward = request.getContextPath();
    response.sendRedirect(pageToForward);           }
catch (Exception sqle)
{
    System.out.println("error UserValidateServlet message : " + sqle.getMessage());
    System.out.println("error UserValidateServlet exception : " + sqle);
}
}else
{
  //session already null/ expired
}
于 2013-03-25T11:24:46.033 に答える
-3

これにより、新しいセッションが作成されます

HttpSession ss = request.getSession(true); //creates a new session.
  if(ss.isNew()){
    ss.invalidate();  //this clears the session
    ss = request.getSession(true); // creates a new session 
    }
于 2014-06-13T12:28:36.033 に答える
-3

あなたがする必要があるのは、セッションに基づいてセッションを属性に設定することです。

request.getSession().setAttribute("sess",request.getSession());

これを使用して、現在のセッションと比較します。この比較が失敗した場合は、ログイン ページにリダイレクトします。これは各ページで行う必要があります。

于 2013-03-25T11:16:36.303 に答える