会員管理しているようなサイトであれば、ふつうログインできて、ログアウトできるようになってたりします。
とりあえず、簡単にログインとログアウトな状態を作るなら、ログインしたときにセッションを作って、ログアウトしたときに、セッションを無効にしてしまうことです。
もちろんこれだけだと、ログアウトしたときに不都合がある場合もあるので、少し工夫は必要かもしれないですが(‘◇’)ゞ
HttpSessionのユーザー情報をクリアするサンプル
前回作ったソースを少し改造してみました。
ブラウザで更新するとカウントアップしていきますが、invalidate=1を一緒に渡すと、セッションを無効にします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class SessionInvalidateTestServlet extends HttpServlet { public static final String SESSION_KEY = "hogehoge"; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { HttpSession session = req.getSession(); if("1".equals(req.getParameter("invalidate"))) { session.invalidate(); session = req.getSession(); } int i = 0; //セッションから前回の値を取り出し。 if(session.getAttribute(SESSION_KEY) != null) { i = (int)session.getAttribute(SESSION_KEY); } //加算 i++; //加算後の値をセッションへセット。 session.setAttribute(SESSION_KEY, i); //ブラウザへ表示 try(PrintWriter pw = resp.getWriter()){ pw.print("<html><body>"); pw.print("<h1>"); pw.print(i); pw.print("</h1>"); pw.print("</body></html>"); pw.flush(); } } } |
実行結果
前回と同じですが、最初はこのようになります。
ブラウザで更新してみると、カウントアップします。
ここで、invalidate=1を渡すと、カウントが1に戻ります。
サンプルの解説
HttpSession#invalidate()により、セッション情報を無効化することができます。
また、セッション情報が無効化されるとセッションにアクセスすることができなくなるので、HttpServletRequest#getSession()にて、改めてセッションを作成しています。