私の Web アプリケーションには次のシナリオがあります。
- すべてのリソースが保護されます。
- ユーザーはログイン画面から開始し、開始ページに転送されます - index.jsp
- セッションの有効期限が切れる少し前に、ユーザーにダイアログが表示されます。セッションの有効期限が近づいています。[延長] をクリックしてセッションを延長し、[キャンセル] をクリックしてキャンセルします。セッションの有効期限までカウントダウンするタイマーがあります。
ユーザーが何もクリックしない場合、セッションを期限切れにするはずのサーブレットを呼び出し、index.jsp に転送します (ログイン画面をトリガーする必要があります)。セッションを無効にするコードは次のとおりです。
@Override protected void doGet(HttpServletRequest request, HttpServletResponse response) { HttpSession session = request.getSession(false); if(session != null) session.invalidate(); try { request.getRequestDispatcher("/jsp/index.jsp").forward(request,response); } catch (Exception e) { e.printStackTrace(); } }
私の問題は、IE で最初にログイン画面を表示している間、2 回目はセッションが無効になっていないように見え、セッションが期限切れになるとメイン画面が更新され続けることです (更新によりセッションが延長されます)。
Firefox では、最初はログイン画面も表示されません。期限切れのサーブレットに移動すると、コンソールにエラーが表示されます。
何が問題になると思いますか?
PSこれをIEで役立つサーブレットに追加するように見えます:
// Set standard HTTP/1.1 no-cache headers.
response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
// Set IE extended HTTP/1.1 no-cache headers (use addHeader).
response.addHeader("Cache-Control", "post-check=0, pre-check=0");
// Set standard HTTP/1.0 no-cache header.
response.setHeader("Pragma", "no-cache");
FFについては、さらに調査する必要があります。
わかりました、FFに関する私の質問に答えるために、問題はセッションの有効期限を非同期で呼び出していて、内部にリダイレクトがあったため、これはFFでは機能しませんでしたが、IEでは何らかの理由で機能しました.