はじめに
Web アプリケーションの設計では、URL を介しては渡されないがアプリケーションでは使用可能な可変情報に、 Web 開発者がアクセスしたいことがあります。 例えば、カレンダーの Web アプリケーションで、ビジターに好みのタイムゾーンを尋ねることができます。 そして、アプリケーションのすべてのページにわたりそのタイムゾーンで日付と時刻を表示できます。 セッション変数は、この機能を提供できます。
セッション変数は、Web デザイナーが利用できる強力なツールですが、Dreamweaver がセッション変数を機能させるために必要なすべてのコードを自動的に生成することはありません。 このドキュメントでは、セッション変数について解説し、Dreamweaver がポートしている様々なサーバーモデルでそれらの変数を使用する手順を示します。
前提条件
このドキュメントを使用したり、理解するには、開発者が ASP や ColdFusion などのサーバーモデルを使用する必要があります。 開発者は、下記のコンセプトについて、実際的な知識を持つ必要があります。 また、動的開発をサポートする Dreamweaver バージョン(Dreamweaver MX または Dreamweaver MX 2004))を使用する必要もあります。 詳細については、Dreamweaver の使用マニュアルやヘルプシステムの関連セクションを参照してください。
- 動的サイトを構築する準備
- 動的ページの作成
セッション変数のしくみ
セッション変数を使用する開発者は、ビジターのセッションが継続中にアクセス可能な変数をアプリケーションに設定することで、ビジター情報を保存できます、
セッション変数には、以下の特徴があります。
- セッション変数は、別途指定がない限り、ビジターがサイトを去ってから 20 分後に期限切れとなります。
- セッション変数は、ビジターが訪問先サイトで 20 分間アクティビティを検出しなかった場合に期限切れとなります。 セッション変数は、ビジターが Web ブラウザーを終了した場合も期限切れとなります。
- セッション変数を機能させるには、ビジターのブラウザーがクッキーを受け入れるように設定する必要があります。
- サイトのページはすべて、 Web サーバー上の 1 つのディレクトリに格納される必要があります。
- セッション変数に保存される情報は、サイトビジターに固有な情報です。 様々なサイトビジターが互いのセッション変数情報にアクセスすることはできません。
通常、開発者は、ビジターに Web アプリケーションのフォームに入力させることで、セッション変数のためのデータをキャプチャします。 セッション変数は、フォームフィールドの値に設定されます。 この TechNote の例では、フォーム要素からの情報を使用してセッション変数の値を設定します。
ASP.NET 以外のすべてのサーバーモデルについて、Dreamweaver には、セッション変数の作成後にそのセッション変数をページに書き込むメニューベースの機能があります。 ただし、Dreamweaver には、セッション変数に値を代入する(つまり、セッション変数をインスタンス化する)メニューベースの機能はありません。 セッション変数への値の代入は、ソースコード内で手動で行う必要があります。
ASP、ColdFusion、JSP、または PHP アプリケーションで、セッション変数を作成する
メモ: ASP.NET では通常、従来の HTML フォームではなく、Web フォームを使用するので、ASP.NET 用の例は、その他のサーバーモデルとはかなり異なります。 ASP.NET サーバーモデルを使用する場合は、このドキュメントの最後にある「ASP.NET の例」を参照してください。
サイト内に 3 つの動的ページを作成します。 最初のページには HTML フォーム(次の手順で解説)を含めます。このフォームが2 番目のページに送信されます。 2 番目のページでは、3 番目のページをポイントするハイパーリンクを作成します。
メモ: この例で 3 つのページを使用する理由は、セッション変数が 2番目、3 番目、それ以降のページで使用できることを示すためです。 リクエスト変数を、セッション変数の代替として、1 つのページから 2番目のページに引き継ぐことは可能です。 ただし、3 番目とそれ以降のページでは使用できません。
- テキストフィールドを選択し、プロパティインスペクターを使用して "txtFirstName" と命名します。
- フォームタグを選択します(フォームコントロールを囲む赤い点線をクリックするか、タグセレクターでフォームタグをクリックします)。 プロパティインスペクターで、フォームアクションとして 2 番目のページを設定します。 フォームメソッドとして POST を指定します。 "GET"メソッドも、セッション変数でよく使用されますが、簡略にするため、この例では POST メソッドを使用しています。
2 番目のページで、コードビュー(「表示/コード」)を起動します。 開始の <html> タグの上で、下記のリストからご使用のサーバーモデルのコードを入力します。
このコードによって、最初のページで作成した "txtFirstName"という名前のフォーム要素から内容がプルされます。 次に、"sessFirstName"という名前でセッション変数が作成され、フォーム要素の内容と同等に設定されます。 つまり、このコードは、ユーザーがフォームページで入力する情報を格納するセッション変数を作成します。
- ASP (VBScript)(コードは必ず 、改行なしで 1 行に収めてください)
<%session("sessFirstName")=Request.Form("txtFirstName")%> - ASP (JavaScript) (このコードは必ず、改行なしで 1 行に収めてください)
<%Session("sessFirstName")=String(Request.Form("txtFirstName"))%> - ColdFusion
<cfset Session.sessFirstName = #Form.txtFirstName#>
セッション変数を使用するため、ColdFusion では、サイトルートで Application.cfm ファイルを作成する必要もあります(このファイルがサイトにまだない場合)。 Application.cfm ファイルには、次のコードを含める必要があります。
<CFAPPLICATION NAME="Name" SESSIONMANAGEMENT="Yes">
注意: UNIX システムでは、ファイル名は大文字/小文字を区別します。 Application.cfm ファイル名は大文字の A で始まることを確認してください。その他の Application.cfm 設定については、Adobe ColdFusion ドキュメンテーションを参照してください。 - JSP(このコードは必ず、改行なしで 1 行に収めてください)
<%session.setAttribute("sessFirstName", request.getParameter("txtFirstName"));%>
以下のコードも有効ですが、最新の Java 仕様で非推奨になりました。
<%session.putValue("sessFirstName", request.getParameter("txtFirstName"));%> - PHP
<?php session_start(); session_register("sessFirstName"); $sessFirstName = $HTTP_POST_VARS['txtFirstName']; ?>
Windows 上のブラウザーで PHP エラーが発生した場合は、PHP のインストールにおいてセッションデータの有効な保存ディレクトリがない可能性があります。 このパラメーターは、PHP.ini ファイルと httpd.conf ファイルでは session.save_path と呼ばれます。 ディレクトリの場所はオプションですが、次の設定は有効です。
session.save_path = c:\php\sessiondata
ご使用の PHP 設定によっては、セッションに関連するすべてのページでセッション管理を手動で有効化する必要があることがあります。 次のコード行を各ページのトップに配置します。
<?php session_start();?>
ページごとに session_start() 関数を呼び出す代わりに、php.ini ファイルで session.auto_start オプションをオンにすることで、PHP にセッションを自動的に開始させることができます。
ASP.NET でセッション変数を作成する
サイト内に 2 つのページを作成します。 最初のページは ASP.NET Web フォームを含み、このフォームは、それ自体にデータをポストバックしてから、2 番目のページにリダイレクトします。
メモ:この例で 2 つのページを使用する理由は、セッション変数が 2番目、3 番目、4 番目、それ以降のページで使用できることを示すためです。 リクエスト変数を、セッション変数の代替として、1 つのページの ASP.NET Web フォームから 2番目のページに引き継ぐことはできません。
最初のページには、1 つの <asp:textbox> サーバーコントロールと 1 つの <asp:button> サーバーコントロールを含む ASP.NET Web フォーム が含まれる必要があります。 テキストボックスコントロールの "id" 属性を "txtFirstName" に設定します。 最初のページの完全なコードは下記のとおりです。 ASP.NET サイト用に選択した言語によって、 C# と VBsite のいいずれかを選択します。
このコードは、"txtFirstName." という名前の <asp:textbox> サーバーコントロールから内容をプルします。 また、サーバーコントロールの内容と等しく設定された "sessFirstName" という名のセッション変数を作成します。 つまり、このコードは、ユーザーがフォームページで入力する情報を格納するセッション変数を作成します。
- ASP.NET (VB) - ページ 1 <%@ Page Language="vb"%><script runat="server"> Sub Button1_Click(ByVal s As Object, ByVal e As EventArgs) Session("sessFirstName") = Request("txtFirstName") Response.Redirect("session2.aspx") End Sub</script><html><head><title>Session Page 1</title></head><body> ASP.NET VB session variable and web form example - page 1 <form id="Form1" method="post" runat="server"><p>first name:<asp:TextBox id="txtFirstName" runat="server" /></p><p><asp:Button id="Button1" runat="server" Text="Submit" onClick="Button1_Click" /></p></form></body></html>
- ASP.NET (C#) - ページ 1 <%@ Page Language="C#" %><script runat="server"> void Button1_Click(object sender, EventArgs e) { Session["sessFirstName"] = Request["txtFirstName"]; Response.Redirect("session2.aspx"); }</script><html><head><title>Session Page 1</title></head><body> ASP.NET C# session variable and web form example - page 1<form id="Form1" method="post" runat="server"><p>first name:<asp:TextBox id="txtFirstName" runat="server" /></p><p><asp:Button id="Button1" runat="server" Text="Submit" onClick="Button1_Click" /></p></form></body></html>
- ASP.NET (VB) - ページ 2 <%@ Page Language="vb" %><html><head><title>Session Page 2</title></head><body><p>ASP.NET VB session variable and web form example - page 2</p><p>first name: <%= session("sessFirstName") %></p></body></html>
- ASP.NET (C#) - ページ 2 <%@ Page Language="C#" %><html><head><title>Session Page 2</title></head><body><p>ASP.NET C# session variable and web form example - page 2</p><p>first name: <%=Session["sessFirstName"]%></p></body></html>
追加情報
セッション変数の詳細については、以下の記事を参照してください。
- Using session variables in your web applications (Web アプリケーションでのセッション変数の使用)
- Displaying session variables in UltraDev(UltraDev でのセッション変数の表示)