(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なら |
①type ・type=”text”で1行のテキストボックスを作っています。 ②name |
21行目 | <input>タグでテキスト入力やボタンを配置できます。指定したパラメタは右記の通りです。 | ①type ・type=”checkbox”はチェックボックスを作っています。 ②name ③checked ④value |
22行目 | <input>タグで送信フォームのボタンを作成します。指定したパラメタは右記の通りです。 | ①type ・type=”submit”で送信フォームのボタンを作成しています。<form>で送っているのでnameとvalueの値が一組になって送信されます。 ②value |
(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) セッションの有効期限設定
・もしユーザーが誤って×ボタン等でブラウザを閉じてしまった場合でも上記の時間が経過すればセッションはサーバーから削除されます。
(2) クッキーとは
クッキーについて別記事『クッキーとは?JSPでCookieを保存&取得するサンプルプログラムと代表的なメソッド紹介』にて解説しています。もし良ければご参照下さい。