JSP-セッショントラッキング
この章では、JSPでのセッション追跡について説明します。HTTPは「ステートレス」プロトコルです。つまり、クライアントがWebページを取得するたびに、クライアントはWebサーバーへの個別の接続を開き、サーバーは以前のクライアント要求の記録を自動的に保持しません。
Webクライアントとサーバー間のセッションの維持
ここで、WebクライアントとWebサーバー間のセッションを維持するためのいくつかのオプションについて説明します-
クッキー
Webサーバーは、一意のセッションIDをCookieとして各Webクライアントに割り当てることができ、クライアントからの後続の要求では、受信したCookieを使用してそれらを認識することができます。
ブラウザがCookieをサポートしていない場合があるため、これは効果的な方法ではない可能性があります。この手順を使用してセッションを維持することはお勧めしません。
非表示のフォームフィールド
Webサーバーは、次のように、非表示のHTMLフォームフィールドを一意のセッションIDとともに送信できます。
<input type = "hidden" name = "sessionid" value = "12345">
このエントリは、フォームが送信されると、指定された名前と値が自動的に GET または POSTデータ。Webブラウザーがリクエストを送り返すたびに、session_id valueは、さまざまなWebブラウザーを追跡するために使用できます。
これはセッションを追跡する効果的な方法ですが、通常の(<A HREF ...>)ハイパーテキストリンクをクリックしてもフォームは送信されないため、非表示のフォームフィールドも一般的なセッション追跡をサポートできません。
URL書き換え
各URLの最後にいくつかの追加データを追加できます。このデータはセッションを識別します。サーバーは、そのセッションIDを、そのセッションに関して保存されているデータに関連付けることができます。
たとえば、 http://tutorialspoint.com/file.htm;sessionid=12345、セッション識別子は次のように添付されます sessionid = 12345 これは、クライアントを識別するためにWebサーバーでアクセスできます。
URLの書き換えは、セッションを維持するためのより良い方法であり、ブラウザがCookieをサポートしていない場合に機能します。ここでの欠点は、ページが単純な静的HTMLページであるにもかかわらず、セッションIDを割り当てるためにすべてのURLを動的に生成する必要があることです。
セッションオブジェクト
上記のオプションとは別に、JSPはサーブレットが提供するHttpSessionインターフェイスを利用します。このインターフェースは、ユーザーを識別する方法を提供します。
- 1ページのリクエストまたは
- ウェブサイトへのアクセスまたは
- そのユーザーに関する情報を保存する
デフォルトでは、JSPでセッション追跡が有効になっており、新しいHttpSessionオブジェクトが新しいクライアントごとに自動的にインスタンス化されます。セッショントラッキングを無効にするには、次のようにページディレクティブセッション属性をfalseに設定して、明示的にオフにする必要があります。
<%@ page session = "false" %>
JSPエンジンは、暗黙的な方法でHttpSessionオブジェクトをJSP作成者に公開します sessionオブジェクト。以来session オブジェクトはすでにJSPプログラマーに提供されており、プログラマーは初期化なしでオブジェクトからデータの保存と取得をすぐに開始できます。 getSession()。
これは、セッションオブジェクトを通じて利用できる重要なメソッドの要約です-
S.No. | 方法と説明 |
---|---|
1 |
public Object getAttribute(String name) このメソッドは、このセッションで指定された名前でバインドされたオブジェクトを返します。名前でバインドされたオブジェクトがない場合はnullを返します。 |
2 |
public Enumeration getAttributeNames() このメソッドは、このセッションにバインドされているすべてのオブジェクトの名前を含むStringオブジェクトの列挙を返します。 |
3 | public long getCreationTime() このメソッドは、このセッションが作成された時刻を返します。これは、1970年1月1日GMTの午前0時からミリ秒単位で測定されます。 |
4 | public String getId() このメソッドは、このセッションに割り当てられた一意の識別子を含む文字列を返します。 |
5 | public long getLastAccessedTime() このメソッドは、クライアントがこのセッションに関連付けられたリクエストを最後に送信した時刻を、1970年1月1日午前0時からのミリ秒数として返します。 |
6 | public int getMaxInactiveInterval() このメソッドは、サーブレットコンテナがクライアントアクセス間でこのセッションを開いたままにする最大時間間隔を秒単位で返します。 |
7 | public void invalidate() このメソッドは、このセッションを無効にし、それにバインドされているオブジェクトのバインドを解除します。 |
8 | public boolean isNew() クライアントがセッションについてまだ知らない場合、またはクライアントがセッションに参加しないことを選択した場合、このメソッドはtrueを返します。 |
9 | public void removeAttribute(String name) このメソッドは、指定された名前でバインドされたオブジェクトをこのセッションから削除します。 |
10 | public void setAttribute(String name, Object value) このメソッドは、指定された名前を使用して、オブジェクトをこのセッションにバインドします。 |
11 | public void setMaxInactiveInterval(int interval) このメソッドは、サーブレットコンテナがこのセッションを無効にするまでのクライアント要求間の時間を秒単位で指定します。 |
セッション追跡の例
この例では、HttpSessionオブジェクトを使用して、セッションの作成時刻と最後にアクセスされた時刻を確認する方法について説明します。新しいセッションがまだ存在しない場合は、リクエストに関連付けます。
<%@ page import = "java.io.*,java.util.*" %>
<%
// Get session creation time.
Date createTime = new Date(session.getCreationTime());
// Get last access time of this Webpage.
Date lastAccessTime = new Date(session.getLastAccessedTime());
String title = "Welcome Back to my website";
Integer visitCount = new Integer(0);
String visitCountKey = new String("visitCount");
String userIDKey = new String("userID");
String userID = new String("ABCD");
// Check if this is new comer on your Webpage.
if (session.isNew() ){
title = "Welcome to my website";
session.setAttribute(userIDKey, userID);
session.setAttribute(visitCountKey, visitCount);
}
visitCount = (Integer)session.getAttribute(visitCountKey);
visitCount = visitCount + 1;
userID = (String)session.getAttribute(userIDKey);
session.setAttribute(visitCountKey, visitCount);
%>
<html>
<head>
<title>Session Tracking</title>
</head>
<body>
<center>
<h1>Session Tracking</h1>
</center>
<table border = "1" align = "center">
<tr bgcolor = "#949494">
<th>Session info</th>
<th>Value</th>
</tr>
<tr>
<td>id</td>
<td><% out.print( session.getId()); %></td>
</tr>
<tr>
<td>Creation Time</td>
<td><% out.print(createTime); %></td>
</tr>
<tr>
<td>Time of Last Access</td>
<td><% out.print(lastAccessTime); %></td>
</tr>
<tr>
<td>User ID</td>
<td><% out.print(userID); %></td>
</tr>
<tr>
<td>Number of visits</td>
<td><% out.print(visitCount); %></td>
</tr>
</table>
</body>
</html>
次に、上記のコードを main.jsp アクセスしてみてください http://localhost:8080/main.jsp。URLを実行すると、次の結果が表示されます-
私のウェブサイトへようこそ
Session Information
セッション情報 | 値 |
---|---|
id | 0AE3EC93FF44E3C525B4351B77ABB2D5 |
作成時間 | 2010年6月8日火曜日17:26:40GMT + 04:00 |
最終アクセス時刻 | 2010年6月8日火曜日17:26:40GMT + 04:00 |
ユーザーID | あいうえお |
訪問数 | 0 |
ここで、同じJSPをもう一度実行しようとすると、次の結果が得られます。
ようこそ私のウェブサイトに戻る
Session Information
情報タイプ | 値 |
---|---|
id | 0AE3EC93FF44E3C525B4351B77ABB2D5 |
作成時間 | 2010年6月8日火曜日17:26:40GMT + 04:00 |
最終アクセス時刻 | 2010年6月8日火曜日17:26:40GMT + 04:00 |
ユーザーID | あいうえお |
訪問数 | 1 |
セッションデータの削除
ユーザーのセッションデータを使い終わったら、いくつかのオプションがあります-
Remove a particular attribute −あなたは public void removeAttribute(String name) 特定のキーに関連付けられている値を削除するメソッド。
Delete the whole session −あなたは public void invalidate() セッション全体を破棄するメソッド。
Setting Session timeout −あなたは public void setMaxInactiveInterval(int interval) セッションのタイムアウトを個別に設定するメソッド。
Log the user out −サーブレット2.4をサポートするサーバー。 logout クライアントをWebサーバーからログアウトし、すべてのユーザーに属するすべてのセッションを無効にします。
web.xml Configuration − Tomcatを使用している場合、上記の方法とは別に、次のようにweb.xmlファイルでセッションタイムアウトを構成できます。
<session-config>
<session-timeout>15</session-timeout>
</session-config>
タイムアウトは分で表され、Tomcatのデフォルトのタイムアウトである30分を上書きします。
ザ・ getMaxInactiveInterval( )サーブレットのメソッドは、そのセッションのタイムアウト期間を秒単位で返します。したがって、セッションがweb.xmlで15分間構成されている場合、getMaxInactiveInterval( ) 900を返します。