Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Java JSP/Servlet

セッションIDとは?JSPでsessionを保存&取得するサンプルプログラムと代表的なメソッド紹介

投稿日:2019年10月12日 更新日:

(0)目次&概説

(1) セッションとは
 (1-1) 概要
 (1-2) サンプルプログラム
  (1-2-1) 概要&画面遷移
  (1-2-2) HelloSession.jsp
  (1-2-3) HelloSession2.jsp
 (1-3) 代表的なメソッド
  (1-3-1) セッションの取得
  (1-3-2) セッションの破棄
  (1-3-3) セッションの有効期限設定 (2) クッキーとは

(1) セッションとは

(1-1) 概要

■クライアント→Webサーバへ「接続を確立してから切断するまでの一連の通信」を「セッション」と言います。
■クライアントがWebサーバー(Webサイト)に最初にアクセスすると、セッションが開始したと見なされて「セッションID」というクライアント毎に一意なキーが発行されます。セッションIDはクライアントにクッキー情報として送られて(Tomcatの場合は”JSESSIONID”という名前の32桁の英数字)、クライアント側にクッキーとして保存されます。
■セッションの場合、セッションIDこそクッキーとしてクライアントに送信されるものの、セッションIDに紐づくセッション情報はあくまで「サーバー側で」保持・管理されています。
■例えば「http」プロトコルの場合は、クライアントからリクエストがあると、下図のように「セッションID」を発行してセッションを開始します。

セッションとは接続の開始~終了までの論理的な単位ですが、終了するケースにはログアウト以外にも下記の例のように複数のパターンがあります。
・ログイン~ログアウトまで
・ログイン~ブラウザを落とすまで
・ログイン~ページ閲覧後に30分以上経過

目次にもどる

(1-2) サンプルプログラム

(1-2-1) 概要&画面遷移

サンプルプログラムの概要は下図の通りです。

画面遷移のサンプルは下記の通りです。

(1-2-2) HelloSession.jsp

HelloSession.jsp
emailアドレスを入力する画面です。「Remember my password」のチェックを付けると、2回目以降の訪問では1回目に入力したemailアドレスが初期表示されます。

<%@ page contentType="text/html; charset=UTF-8" import="java.util.*" session="true" %>
<%
        String email =(String)session.getAttribute("email");
%>
<!DOCTYPE html>
<html>
        <head>
                <meta charset="UTF-8" />
                <title>Hello Session</title>
        </head>
        <body>
                <form method="POST" action="http://tk2-221-20382.vs.sakura.ne.jp:8080/TestProject/HelloSession2.jsp">
                        e-mail address:
                        <input type="text" name="email" size="40" value="<%
                                if(email==null){
                                        out.print("");
                                }else{
                                        out.print(email);
                                }
                        %>"/><br/>
                        <input type="checkbox" name="remember" checked="checked" value="1"/>Remember my password<br/>
                        <input type="submit" value="Send" />
                </form>
        </body>
</html>

 

<解説>

3行目 HelloSession2.jspにてセッションに保存されたemailアドレスの情報を「getAttribute」メソッドで取得しています。 getAttributeは型が「Object」で返されるため、(String)でString型にキャストしています。
7行目~10行目 <head>タグでブラウザでページを開く時のタブの文言を設定しています。  
12行目 <form>タグで送信フォームの作成をしています。指定したパラメータは右記の通りです。 ①HTTPメソッド
“POST”なのでサーバーへ何かしらデータを送信や登録します。
②action
ここでは転送先のURLやURNを指定しますが、指定は絶対URLでも相対URLでも可能です(※サンプルプログラムは「絶対URL」で指定しています)。
・絶対URLの構文:http://[HostName]:[TomcatPort]/[ProjectName]/[JSPName].jsp
・相対URLの例:
HelloSession2.jsp
14行目~19行目 <input>タグでeメールアドレス用のテキストボックスを作成しており、「if文」で下記のように分岐をしています。

(a)もしemailアドレスがnullなら
→空白を出力
(b)それ以外なら
→emailアドレスを出力

①type
・type=”text”で1行のテキストボックスを作っています。

②name
・パラメータ名を指定します。ここで決めた名前は”request.getParameter()”等で値を取得する際に指定する名前になります。

21行目 <input>タグでテキスト入力やボタンを配置できます。指定したパラメタは右記の通りです。 ①type
・type=”checkbox”はチェックボックスを作っています。

②name
・パラメータ名を指定します。ここで決めた名前は”request.getParameter()”等で値を取得する際に指定する名前になります。

③checked
・checked=”checked”属性で予めチェックされた状態にしています。

④value
・value=”[値]”で送信する値を指定できます。この値は”request.getParameter()”で取得できる値になります。

22行目 <input>タグで送信フォームのボタンを作成します。指定したパラメタは右記の通りです。 ①type
・type=”submit”で送信フォームのボタンを作成しています。<form>で送っているのでnameとvalueの値が一組になって送信されます。

②value
・ボタンに表示される文言を指定しています(今回の例では「Send」)。

(1-2-3) HelloSession2.jsp

HelloSession2.jsp
この画面では「HelloSession.jsp」にて入力したemailアドレスについて、チェックボックスの値を見て、セッションに保存するか否かを判断して処理しています。

<%@ page contentType="text/html; charset=UTF-8" import="java.util.*" %>

<!DOCTYPE html>
<html>
        <head>
                <meta charset="UTF-8" />
                <title>Hello Session</title>
        </head>
        <body>
        <%
                try{
                        if(request.getParameter("remember")!=null){
                                session.setAttribute("email", request.getParameter("email"));
                        }else{
                                session.setAttribute("email", "");
                        }
                }catch(NullPointerException e){
                        e.printStackTrace();
                }
        %></br>
        <a href="HelloSession.jsp" >Go Back</a>
        </body>
</html>

 

<解説>

5行目~8行目 <head>タグでブラウザでページを開く時のタブの文言を設定しています。  
11行目~19行目 「try~catch」文にて例外処理をしています。
「try」の中ではチェックボックスの値を見て、チェック「有り」ならemailのセッション情報を保存する処理を記述しています。
18行目の「e.printStackTrace();」でスタックトレースを出力しています。
そもそも「try~catch」とは、プログラムが例外エラーにより停止する事を防ぐため、もしも例外が起きた際の対処を記述しておく事ができます。
<構文>
try {
  実行分;  例外が発生する可能性のある処理を記述する。
} catch (例外の型 引数e) {
  例外処理;  //例外が発生した場合の処理を記述する。
}
12行目~16行目 emailデータをセッションに「保存するか否か」の条件分岐を実装しています。「if」文で右記のように分岐しています。 (a)もし最初の画面(HelloSession.jsp)でチェックボックスが「チェック有り」なら
→emailアドレスの値をセッションに保存します

(b)それ以外なら
→”空白”をセッションに保存(※最初の画面に戻った際にアドレスを空白で表示するため)

21行目 <a href>タグで「戻る」ボタンのリンクを作成しています。 今回は戻り先を「HelloSession.jsp」に指定し、もしチェックがあれば前回のメールアドレスが初期値として表示されます。

目次にもどる

(1-3) 代表的なメソッド

(1-3-1) セッションの取得
セッションの取得は下記のメソッドで行います。
クラス:Session
 ∟メソッド(オブジェクト型):getAttribute
 ∟メソッド(void型):setAttribute

目次にもどる

(1-3-2) セッションの破棄
セッションの破棄は下記メソッドで行います。実行すると現在のセッションとセッションに関連付けられている全てのオブジェクトを破棄します。
クラス:Session
 ∟メソッド:invalidate

目次にもどる

(1-3-3) セッションの有効期限設定
・セッションはデフォルトで30分有効で、セッションアクセスが30分発生しなかった場合には自動的に削除されます。

・もしユーザーが誤って×ボタン等でブラウザを閉じてしまった場合でも上記の時間が経過すればセッションはサーバーから削除されます。

 >目次にもどる

(2) クッキーとは

クッキーについて別記事『クッキーとは?JSPでCookieを保存&取得するサンプルプログラムと代表的なメソッド紹介』にて解説しています。もし良ければご参照下さい。

Adsense審査用広告コード


Adsense審査用広告コード


-Java, JSP/Servlet

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

Javaでcsvファイルに書き込みを行う方法(サンプルプログラム付き)

<目次> (1) Javaでcsvファイルに書き込みを行う方法  (1-1) 構文  (1-2) サンプルプログラム (1) Javaでcsvファイルに書き込みを行う方法 Javaでcsvファイルを生 …

JavaのArrrayListとLinkedListの違いについて

<目次> (1) JavaのArrrayListとLinkedListの違いについて  (1-1) 比較表(ArrayList vs LinkedList)  (1-2) まとめ  (1-3) 参考 …

Javaの動的Webプロジェクト作成での事前設定と雛形Webプロジェクト作成

「動的Webプロジェクト」とはHTMLのような静的ページのみならず、ServletやJSPを用いてWebアプリケーション開発をする際に作成します。本記事ではEclipseにて「動的Webプロジェクト」 …

RESTful APIのサンプル(Java)を作成する手順をご紹介

  <目次> (1) RESTful APIのサンプル(Java)を作成する手順をご紹介  (1-1) 作成するAPIの概要  (1-1) RESTful APIの開発用プロジェクト作成(S …

JavaScriptでタグを追加する方法(jQueryのtagEditorプラグインを導入)

  <目次> (1) JavaScriptでタグを追加する方法(jQueryのtagEditorプラグインを導入)  (1-1) 概要  (1-2) tagEditorの導入方法  (1-3 …

  • English (United States)
  • 日本語
Top