セッションのトラッキング

HTTP プロトコルはステートレスです。つまり、Web サーバーには複数の要求/応答を通してクライアントをトラッキングできません。しかし、JRun ではセッション トラッキング機能がサポートされているので、Web サイトで情報を格納し、複数の要求を通してクライアントをトラッキングできます。クライアントがアプリケーション内で別のページに移動しても、情報は破棄されず、ユーザ セッションが継続している間、保持されます。

特定のユーザ セッションに関する情報を格納するには、JSP session オブジェクトを使用します。ユーザがアプリケーション内で別のページに移動しても、session オブジェクトに格納されたデータは破棄されず、ユーザ セッションが継続している間、保持されます。

有効に設定すると、まだセッションを開始していないユーザからアプリケーションのページが要求された場合、session オブジェクトが自動的に作成されます。セッションが期限切れになった場合、または中断された場合は、Web サーバーにより、session オブジェクトが破棄されます。

JSP から session オブジェクトに情報を書き込むことができます。クライアントから要求された別の JSP で、この情報にアクセスすることが可能です。たとえば、ユーザのショッピング カートに ID を割り当てておくと、クライアントによりカートの内容が追加、削除、または修正されたときに、Web サイトからショッピング カートに関する情報にアクセスできます。この ID は session オブジェクトに格納できます。

JRun では、セッションのトラッキングにクッキーを使用します。したがって、この例を実行するには、ユーザのブラウザでクッキーをサポートしている必要があります。JRun セッション トラッキングの有効と無効を切り替えるには、JRun 管理コンソールを使用します。セッション トラッキングを制御する方法の詳細については、『JRun セットアップ ガイド』を参照してください。

次の例では、JSP が 3 ページ使用されています。最初のページ example3a.jsp では、URL 要求から名前と口座残高が取得され、この情報が session オブジェクトに書き込まれます。これで、クライアントがアクセスするすべての JSP から、この情報が使用できます。

example3a.JSP には、クライアントからほかの JSP へのアクセスに使用される 2 種類のリンクが表示されます。最初のリンクでは投資オプション、2 番目のリンクでは求人状況がリストに表示されます。この例の要求 URL は次のとおりです。

http://localhost/example3a.jsp?bal=222.45&fName=Steven

次の図は、この URL に対する example3a.jsp の出力を示します。

example3a.jsp は次のとおりです。

<html>
<head><title>Session Example</title></head>
<body>
<p>
<h1> Where will your balance take you?</h1>
<br>
<%-- 要求オブジェクトからパラメータを取得します。--%>
<% String firstName = request.getParameter("fName"); %>
<% String balance = request.getParameter("bal"); %>

<%-- bal パラメータを String から double に変換します。--%>
<% double accountBalance = Double.valueOf(balance).doubleValue(); %>

<%-- セッション オブジェクトに入力パラメータを書き込みます。
  セッション オブジェクトは double を格納できません。 
  まず、オブジェクトを Double に変換する必要があります。
--%>
<% 
  session.setAttribute("userName", firstName); 
  Double tempAccountBalance = new Double(accountBalance);
  session.setAttribute("userBalance", tempAccountBalance); 
%>

<%-- 出力結果 --%>
Balance for <%=firstName %>:<%=accountBalance %> <br>
<br><br>
Would you like to <A href="example3b.jsp">invest your money</a>?. 
<br><br>
Do you need a <a href="example3c.jsp">job</a>. 
</body>
</html>

example3b.jsp ページにより、session オブジェクトからクライアントの名前と残高が調べられ、投資オプションが提示されるか、または求人を調べるためのプロンプトが表示されます。

<html>
<body>

<%-- セッション オブジェクトから名前を取得します。--%>
<% String fName = (String) session.getAttribute("userName"); %>

<h2>Hi <%=fName %> </h2>

<%-- 残高を取得し、double に変換します。--%>
<%
  Double tempBal = (Double)session.getAttribute("userBalance");
  double accountBalance = tempBal.doubleValue(); 
%>

<%-- 投資に十分な残高があるか? --%>
<% if(accountBalance > 100.00) { %>
  Your balance of $<%= accountBalance %> is sufficient for investing.  
  We offer a number of investment opportunities, including: <br>
    <li>Bonds<br>
    <li>CDs<br>
    <li>Mutual funds<br>
<% } %>

<%-- 残高が少なすぎるか? --%>
<% if(accountBalance <= 100.00) { %>
   Your balance is too low for investing.  It looks like you need a <a 
href="example3c.jsp">job</a>. 
<% } %>
</body>
</html>

The example3c.jsp page greets the user using the name passed in the session object and lists available jobs:

<html>
<body>

<%-- セッション オブジェクトからパラメータを取得します。--%>
<% String fName = (String) session.getAttribute("userName"); %>

<h2>Hi <%=fName %></h2>

<h2>Available positions include:</h2>
Software Engineer<br>
QA<br>
Technical Writer<br>
</body>
</html>