JSPには次のコードがあります。
<%
if(session.getAttribute("Username") == null || session.getAttribute("Username") == "_INVALID_")
{
response.sendRedirect("LoginPage.html");
}
%>
<form>
<input type="button" value="Change Account Details" onClick="location.href='ChangeDetails.jsp'">
<br></br>
<input type="button" value="Add Customers" onClick="location.href='AddCustomers.jsp'">
<br></br>
<input type="button" value="Manage Flights" onClick="location.href='ManageFlights.jsp'">
<br></br>
<input type="button" value="Book Flights" onClick="location.href='BookFlights.jsp'">
<br></br>
<input type="button" value="Log Out" onClick="location.href='LoginPage.html'">
</form>
ユーザーがログアウトボタンをクリックすると、ログインページにリダイレクトして、現在のセッションを強制終了します。リダイレクトの部分は成功しましたが、セッションを強制終了する方法がわかりません。どうすればこれを行うことができますか?
現在のセッションを強制終了するには、基本的に HttpSession#invalidate()
を呼び出して、ログインページまたはメインページにリダイレクトする必要があります。このコードは、POSTリクエストによって呼び出される servlet のdoPost()
メソッドに配置されることになっています。
例えば。
<form action="${pageContext.request.contextPath}/logout" method="post">
<input type="submit" value="Logout" />
</form>
と
@WebServlet("/logout")
public class LogoutServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getSession().invalidate();
response.sendRedirect(request.getContextPath() + "/LoginPage.html");
}
}
具体的な問題とは無関係、ユーザー名確認コードが適切な場所にありません。すべてのJSPページに同じコードをコピーペーストするべきではありません。 servlet filter の単一の場所でこのジョブを実行する必要があります。 JSPファイルのJavaコードは、できるだけ avoided にする必要があります。
さらに、エンドユーザーがブラウザの戻るボタンを使用して履歴内を戻るときに別の潜在的な問題があります。デフォルトでは、ブラウザーはすべての応答をキャッシュするため、サーバーから真新しいものを要求する代わりに、戻るボタンがブラウザーキャッシュからページを表示する場合があります。これを修正するには、この関連する質問を参照してください ユーザーがログアウト後に以前にアクセスした保護されたページを表示しないようにする
最後になりましたが、かなり奇妙なHTMLがあります。ナビゲートするonClick
のボタン?どのようにユーザーとSEOが非友好的。代わりに通常の<a>
リンクを使用してください。ボタンの外観は、CSSを使用してください。
セッションを終了するにはこれを試してください
HttpSession newsession = request.getSession(false);
if (newsession != null)
{
newsession.invalidate();
}
response.sendRedirect("../index.jsp");