Latest web development tutorials

JSPセッション

HTTPクライアントがページを取得するたびに、別の接続サーバーを開く必要があることを意味ステートレスなプロトコルである、サーバーは、以前のクライアントが任意の情報を要求記録されません。

クライアントとサーバーのセッションを維持するための3つの方法があります。


クッキー

ネットワークサーバは、クライアントの次の要求を識別するために各クライアントを表現するためにクッキーとして一意のセッションIDを割り当てることができます。

多くの時間は、必ずしもブラウザのcookieをサポートしていないので、これは、効率的な方法ではないかもしれないので、セッションを維持するために、この方法を使用することはお勧めしません。


隠しフォームフィールド

Webサーバは、次のように、隠されたHTMLフォームのフィールドと一意のセッションIDを送信することができます。

<input type="hidden" name="sessionid" value="12345">

このエントリは、フォームが送信されると、指定された名前と値が自動的にGETまたはPOSTデータに含まれることを意味します。 ブラウザが要求を送信するたびに、SESSION_ID値は、別のブラウザの軌跡を保存するために使用することができます。

このアプローチは、効果的な方法かもしれないが、フォーム送信イベントが<A HREF>タブのハイパーリンクをクリックして、したがって、隠しフォームフィールドは、一般的なセッション・トラッキングをサポートしていません生成されません。


URL書き換え

あなたは、セッション識別子を関連付けることができるデータ・サーバに応じて、セッションを区別するために、各URLの後ろにいくつかの余分なデータを追加することができます。

例:http://w3cschool.cc/file.htm;セッションID = 12345、セッションIDセッションID = 12345、サーバーはクライアントを識別するために、このデータを使用することができます。

これとは対照的に、URL書き換えはクッキーをサポートしていないブラウザでも動作することができたとしても、より良い方法ですが、欠点は、あなたはそれが簡単なHTMLページであっても、それぞれの動的URLのセッションIDを指定しなければならないことです。


セッションオブジェクト

外上記のいくつかの方法に加えて、JSP、サーブレットのHttpSessionインタフェースは、情報へのすべてのユーザーのアクセスを保存するために、ユーザを識別するために使用しています。

デフォルトでは、JSPは、新しいHttpSessionオブジェクトが自動的に新しいクライアントのためにインスタンス化され、セッションの追跡を可能にします。 次のように禁止セッショントラッキングは、明示的に達成するためにはfalseにpageディレクティブのsession属性の値によってそれをオフにする必要があります。

<%@ page session="false" %>

JSPエンジン暗黙のセッションオブジェクトは現像液に露出されます。 セッションオブジェクトを提供することにより、開発者は簡単にデータを保存したり、データを取得することができます。

次の表は、重要な方法セッション・オブジェクトの一部を示します:

SN メソッド 説明
1 パブリックオブジェクトのgetAttribute(文字列名)

返されたオブジェクトのセッションの指定された名前でバインドされたオブジェクト、またはnull何も存在しない場合
2 パブリック列挙getAttributeNames()

セッションオブジェクトにすべてのオブジェクト名を返します。
3 公共長いgetCreationTime()

セッションオブジェクトは、1970年1月1日早朝の日から、時間をミリ秒単位で作成され返します
4 公共の文字列のgetId()

セッションオブジェクトIDを返します。
5 公共長いgetLastAccessedTime()

早朝の日付は1970年1月1日から、ミリ秒単位で、クライアントが訪れた最後の時刻を返します
6 公共int型getMaxInactiveInterval()

秒で、最大時間間隔を返し、サーブレットコンテナは、この時点で開いているセッションを維持します
7 公共ボイド無効()

セッションにバインドされたすべてのオブジェクトをアンバンドリングセッションの無効化、
8 パブリックブールISNEW(

新しいクライアントかどうかを返し、またはクライアントがセッションに参加することを拒否した場合
9 ます。public void removeAttribute(文字列名)

指定されたセッション・オブジェクト名を削除します
10 公共ボイドのsetAttribute(文字列名、オブジェクト値)

指定された名前と値を持つオブジェクトを生成し、セッションにバインドするには
11 ます。public void setMaxInactiveInterval(int型の間隔)

時間を指定するには、秒単位で、サーブレットコンテナは、この期間中に有効なセッションを維持します

JSPセッションアプリケーション

この例では、作成時刻と最終アクセス時刻を取得するためにHttpSessionオブジェクトを使用する方法について説明します。 このオブジェクトが存在しない場合我々は、関連するリクエストオブジェクトのための新しいセッションオブジェクトになります。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*" %>
<%
   // 获取session创建时间
   Date createTime = new Date(session.getCreationTime());
   // 获取最后访问页面的时间
   Date lastAccessTime = new Date(session.getLastAccessedTime());

   String title = "再次访问本教程实例";
   Integer visitCount = new Integer(0);
   String visitCountKey = new String("visitCount");
   String userIDKey = new String("userID");
   String userID = new String("ABCD");

   // 检测网页是否由新的访问用户
   if (session.isNew()){
      title = "访问本教程实例";
      session.setAttribute(userIDKey, userID);
      session.setAttribute(visitCountKey,  visitCount);
   } else {
	   visitCount = (Integer)session.getAttribute(visitCountKey);
	   visitCount += 1;
	   userID = (String)session.getAttribute(userIDKey);
	   session.setAttribute(visitCountKey,  visitCount);
   }
%>
<html>
<head>
<title>Session 跟踪</title>
</head>
<body>

<h1>Session 跟踪</h1>

<table border="1" align="center"> 
<tr bgcolor="#949494">
   <th>Session 信息</th>
   <th>值</th>
</tr> 
<tr>
   <td>id</td>
   <td><% out.print( session.getId()); %></td>
</tr> 
<tr>
   <td>创建时间</td>
   <td><% out.print(createTime); %></td>
</tr> 
<tr>
   <td>最后访问时间</td>
   <td><% out.print(lastAccessTime); %></td>
</tr> 
<tr>
   <td>用户 ID</td>
   <td><% out.print(userID); %></td>
</tr> 
<tr>
   <td>访问次数</td>
   <td><% out.print(visitCount); %></td>
</tr> 
</table> 
</body>
</html>

HTTPにアクセスしてください:// localhostを:8080 / testjsp / main.jsp、最初の実行は、以下の結果が得られます:

再び訪問し、我々は次のような結果が得られます:


セッションデータの削除

ユーザーのセッションデータの処理が終了すると、以下のオプションがあります。

  • 特定のプロパティを削除します。

    指定されたプロパティを削除するには、公共ボイドremoveAttribute(String name)メソッドを呼び出します。

  • 全体の会話を削除するには:

    セッション全体が無効であることを確認するためのパブリックボイド無効()メソッドを呼び出します。

  • セッション継続時間を設定します:

    セッションタイムアウトを設定するには、公共ボイドsetMaxInactiveInterval(int型の間隔)メソッドを呼び出します。

  • サインユーザー:

    サーバーのServlet2.4サポートされているバージョンでは、ユーザーをログアウトするログアウト()メソッドを呼び出すことができますし、関連するすべてのセッションが無効です。

  • web.xml構成ファイル:

    Tomcatを使用している場合は、次のようにweb.xmlファイルを設定できます。

  <session-config>
    <session-timeout>15</session-timeout>
  </session-config>

数分でタイムアウト、Tomcatのデフォルトのタイムアウトは30分です。

getMaxInactiveInterval()メソッド内のサーブレットは、タイムアウトの秒を返します。 web.xmlのは15分のために設定されている場合は、getMaxInactiveInterval()メソッドは、900を返します。