Java

【Java】セッションとは?セッションを使ったデータ取捨の方法

1.sessionとは

sessionとは、複数のユーザがアクセスするWebアプリケーションで、各ユーザの状態の保存・ユーザの区別を行う機能です。ユーザの識別はセッションIDを使って行います。
まあ簡単に言うと、ログインからログアウトまでの情報を保持する機能ですね。

リクエストスコープと似ているため間違えやすい

javaでsessionを扱う際、リクエストスコープとごちゃ混ぜになる人もいるかと思いますが、リクエストスコープはリクエスト毎に生成され、レスポンスが返されるまで利用可能な機能で、セッションとは異なります。

リクエストスコープに関しては下の記事で解説しています。

2.sessionの使い方(getAttribute,setAttribute)

まずは、基本構文から勉強していきましょう。

セッションを使ってデータの格納や取得、削除などを行うときは基本的に次のようなコードを記載します。

基本構文1

【セッションに値を格納】

session.setAttribute("属性名(key)","値(value)")

基本構文2

【セッションに格納されている値の取得】

session.getAttribute("属性名(key)")

基本構文3

【セッションに格納されている値の削除】

session.removeAttribute("属性名(key)")

次に、セッションを実際に用いたコードを見ていきましょう。

(session.java)

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@WebServlet("/session")
public class session extends HttpServlet {

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//➀セッションの作成・取得
HttpSession session = request.getSession();

int i = 0;
String str = null;

//➁セッションに前回の値があった場合は取出して i に格納
if(session.getAttribute("session") != null) {

i = (int)session.getAttribute("session");
str = "holding a session";

}

//➂加算
i++;

//➃加算後の値をセッションへセット
if(i<=9)

session.setAttribute("session", i);

else {

session.removeAttribute("session");
i = 0;
str = "disposed a session";

}

//➄ブラウザへ表示
PrintWriter pw = response.getWriter();

pw.print("<html><body>");
pw.print("<h1>");
pw.print(i);
pw.print("</h1>");
if(i==1) str = "holding a session";
if(str != null) {

pw.print("<p>");
pw.print(str);
pw.print("</p>");

}
pw.print("</body></html>");
pw.flush();
pw.close();

}

}

 

上記コードは、次の動作を持つプログラムです。

  • セッションに格納した数値を取得し、画面に表示する
  • ページを更新するたびに格納数値に1を足して、10以上になると0にリセットされる
  • セッションを取得したか破棄したかを文章で表示する

実行結果

 

画面を更新するたび、表示数字が+1され、数字が10以上になるとセッションを削除します。
※画面が更新されるたびにsession.javaは実行されます。

 

解説

  1. まず、セッションを開始・継続するには、HttpServletRequestのgetSessionメソッドを実行します。(session.java➀)
  2. セッションから、キーを指定して対象の値を取出します。(session.java➁)
    ※mapと同じで、セッションも(key,value)でデータを保持します。valueにデータが入り、keyはそのデータ識別するために使用します。
  3. keyを指定して、セッションに値を格納します。(session.java➂)
  4. もし、セッションに格納された値が10以上だった場合、セッションの対象データを削除します。(session.java➃)
  5. ブラウザ上に値を表示します(session.java➄)

以上で終わりとなります。お疲れ様でした!

-Java

Copyright© タカログ , 2022 All Rights Reserved Powered by AFFINGER5.