チュートリアル : プロファイル プロパティによる Web サイト ユーザー情報の保持
更新 : 2007 年 11 月
ASP.NET の Profile プロパティを使用すると、アプリケーションでユーザー固有の情報を追跡し、永続的に格納できます。たとえば、ユーザーは郵便番号やお気に入りの配色を指定でき、アプリケーションはこの情報を格納し、アプリケーションの任意の場所で取得できます。ASP.NET は、現在のユーザーが匿名ユーザーの場合もログオンしているユーザーの場合も、そのユーザー アカウント用に格納された個人情報を自動的に現在のユーザーと対応させます。
このチュートリアルでは、アプリケーションにいくつかの Profile プロパティを追加し、それらの Profile プロパティを使用して、ユーザー用にパーソナル化された Web サイトのページを作成します。
このチュートリアルでは、次の作業を行う方法について説明します。
Profile プロパティを使用するようにアプリケーションを構成する。
ユーザー用に保持する Profile プロパティとして、簡単なプロパティと複雑なプロパティを作成する。
アプリケーションで Profile 値を設定し、取得する。
匿名ユーザーとログオンしているユーザーの両方が設定された Profile プロパティを使用する。
前提条件
このチュートリアルを実行するための要件は次のとおりです。
Microsoft Visual Web Developer
Microsoft .NET Framework
Microsoft SQL Server Standard Edition
このチュートリアルで作成する Profile プロパティ情報は、SQL Server Standard Edition データベースに格納されます。
Cookie が有効なブラウザ
メモ : アプリケーションが Cookie を使用せずに動作するように構成されている場合、ASP.NET の Profile プロパティは Cookie を使用せずに動作できます。ただし、このチュートリアルでは、Profile プロパティの既定の構成設定値を使用します。既定では、Cookie が使用されます。
Web サイトの作成と設定
「チュートリアル : Visual Web Developer での基本的な Web ページの作成」の手順を完了して Microsoft Visual Studio で既に Web サイトを作成してある場合はその Web サイトを使用できるので、次のセクションに進んでください。それ以外の場合は、次の手順に従って、新しい Web サイトを作成します。
ファイル システム Web サイトを作成するには
Visual Studio を開きます。
[ファイル] メニューの [新規作成] をポイントし、[Web サイト] をクリックします。または、[ファイル] メニューの [新しい Web サイト] をクリックします。
[新しい Web サイト] ダイアログ ボックスが表示されます。
[Visual Studio にインストールされたテンプレート] の [ASP.NET Web サイト] をクリックします。
左端の [場所] ボックスの [ファイル システム] をクリックします。
右端の [場所] ボックスに、Web サイトのページを格納するフォルダの名前を入力します。
たとえば、フォルダ名として「C:\WebSites」と入力します。
[言語] ボックスで、作業に使用するプログラミング言語をクリックします。
[OK] をクリックします。
Visual Web Developer によりフォルダが作成され、Default.aspx という名前の新しいページが作成されます。
プロファイル プロパティの構成
ASP.NET の Profile プロパティを操作する前に、各ユーザーについて追跡する Profile プロパティをアプリケーションで有効にし、定義します。最初に、ユーザーに関して Web サイトで追跡する単一の PostalCode プロパティを作成します。また、PostalCode プロパティを構成して、匿名ユーザーとログオンしているユーザーの両方についてこのプロパティをサイトで追跡するようにします。
最初に匿名ユーザーとして作業します。水面下で、ASP.NET はコンピュータの Cookie に格納される固有の匿名 ID をユーザーに割り当てます。ASP.NET は、この匿名 ID を使用して、ユーザーに固有の値の設定と取得を行います。
Web サイトのプロファイル プロパティを構成するには
ソリューション エクスプローラで、Web サイトに既に Web.config ファイルが存在するかどうかを確認します。
Web サイトに Web.config ファイルがない場合は、次の手順を実行します。
Web サイト名を右クリックします。
[新しい項目の追加] をクリックします。
[Visual Studio にインストールされたテンプレート] の [Web 構成ファイル] をクリックします。
[追加] をクリックします。
Web.config という名前の新しいファイルがサイトに追加され、エディタで開かれます。
次の <profile> 要素を、<system.web> 要素の子として Web.config ファイルに追加します。
<system.web> <anonymousIdentification enabled="true" /> <profile> <properties> <add name="PostalCode" type="System.String" allowAnonymous="true" /> </properties> </profile> <!-- other Web.config settings here --> </system.web>
メモ : Web.config ファイルの要素は大文字と小文字を区別します。したがって、要素をコピーするか、ここに示したとおりに入力してください。
次の要素を追加しました。
<anonymousIdentification> 要素。これは、Profile プロパティがログオンしている (認証済みの) ユーザーでのみ機能するか、ログオンしているユーザーと匿名ユーザーの両方に機能するかを指定します。
この場合は、enabled を true に設定しました。したがって、Profile プロパティ情報は、ログオンしているユーザーと匿名ユーザーの両方について追跡されます。
<properties> 要素。これには、定義中のすべての Profile プロパティが含まれます。
<add> 要素。これは、新しい <profile> 要素を定義します。
この場合は、PostalCode という名前の単一の Profile プロパティを定義しました。
Profile プロパティを定義するときは、.NET Framework 型のクラス名を使用してデータ型を指定します。匿名ユーザーについて Profile プロパティを追跡するかどうかも指定します。匿名 ID を有効にした後で、匿名ユーザーについて Profile プロパティを個別に追跡するかどうかも追加で指定できます。
定義する追加の Profile プロパティごとに、新しい add 要素を作成します。
メモ : 既定では、ユーザー プロファイル情報は、Web サイトの Application_Data サブディレクトリ内の SQL Server Standard Edition データベースに格納されます。このチュートリアルでは、この既定の構成を使用します。多数のユーザーをサポートする実際のアプリケーションでは、Microsoft SQL Server データベースに Profile プロパティのデータを格納することをお勧めします。詳細については、このチュートリアルで後述する「次の手順」を参照してください。
PostalCode プロパティの設定と取得
Profile プロパティを追跡するように Web サイトを構成したら、通常のコンポーネントのプロパティと同様の方法で Profile プロパティを設定および取得できます。ここでは、前のセクションで定義した PostalCode 値を設定および取得する方法を示すページを作成します。
PostalCode プロパティの設定と取得を行うページを作成するには
Profiles.aspx という名前の新しい Web ページをサイトに追加します。
Profiles.aspx を開き、デザイン ビューに切り替えます。
ツールボックスの [標準] グループから、次の表に示すコントロールをページにドラッグし、以下のようにプロパティを設定します。
コントロール
プロパティの設定
TextBox
ID = textPostalCode
Button
ID = SetPostalCode
Text = Set Postal Code
Label
ID = labelPostalCode
Text = (空)
ソース ビューに切り替え、次の属性が存在しない場合は、SetPostalCode ボタンにこの属性を追加します。
OnClick="SetPostalCode_Click"
[Set Postal Code] の Click ハンドラを作成し、次の強調表示されたコードを追加します。
Sub SetPostalCode_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Profile.PostalCode = Server.HtmlEncode(textPostalCode.Text) labelPostalCode.Text = Profile.PostalCode End Sub
void SetPostalCode_Click(object sender, System.EventArgs e) { Profile.PostalCode = Server.HtmlEncode(textPostalCode.Text); labelPostalCode.Text = Profile.PostalCode; }
ユーザー プロファイルが有効な場合、現在のコンテキストにユーザー プロファイルを追加する Profile という名前のプロパティが ASP.NET によって動的に作成されます。この結果、Profile.PostalCode を介して個々の Profile プロパティを取得できるようになります。
Page_Load ハンドラを作成し、次の強調表示されたコードを追加します。
Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) labelPostalCode.Text = Profile.PostalCode End Sub
void Page_Load(object sender, System.EventArgs e) { labelPostalCode.Text = Profile.PostalCode; }
このコードは、ページが要求されるたびに Profile.PostalCode 値を表示します。
PostalCode プロファイル プロパティのテスト
ここで、前のセクションで定義した PostalCode プロパティをテストできます。
メモ : |
---|
メンバシップが有効な既存の Web サイトを操作している場合は、ログオフしていることを確認してください。 |
PostalCode プロパティをテストするには
Ctrl キーを押しながら F5 キーを押して Profiles.aspx ページを実行します。
メモ : ブラウザにエラー 502、またはページを表示できないことを意味するエラーが表示されたときは、ブラウザを、ローカルの要求に対してはプロキシ サーバーを使用しないように設定するとエラーが解決します。詳細については、「方法 : ローカル Web 要求に対してプロキシ サーバーをバイパスする」を参照してください。
ボックスに郵便番号を入力し、[Set Postal Code] をクリックします。
入力した郵便番号が Label コントロールに表示されます。
ブラウザを閉じて、現在のセッションを終了します。
ブラウザを再度開き、Profiles.aspx ページを要求します。
先ほど入力した郵便番号が Label コントロールに表示されます。
前の手順の最後の部分では、ASP.NET が PostalCode 値を格納することを示しました。ページに再度アクセスすると、ユーザーに固有の匿名 ID に基づいて PostalCode 値が読み込まれます。
複雑なプロパティの定義
このチュートリアルの前半の「PostalCode プロパティの設定と取得」では、文字列として格納される、PostalCode という名前の単純なプロパティを作成しました。このセクションでは、FavoriteURLs という名前のプロパティを定義します。このプロパティは、コレクションです。ASP.NET では任意の型の Profile プロパティを格納できますが、Profile プロパティを定義するときは追加情報を指定する必要があります。
FavoriteURLs プロパティを定義するには
Web.config ファイルを開きます。
このチュートリアルの前半の「プロファイル プロパティの構成」で作成した profile 要素に、次の強調表示された要素を追加します。
<anonymousIdentification enabled="true" /> <profile> <properties> <add name="PostalCode" type="System.String" allowAnonymous="true" /> <add name="FavoriteURLs" type="System.Collections.Specialized.StringCollection" allowAnonymous="true" /> </properties> </profile>
FavoriteURLs という名前の新しい Profile プロパティを追加しました。単純型 (文字列や整数など) ではない Profile プロパティの場合は、完全修飾型を指定する必要があります。ここでは、文字列を保持するコレクションである Profile プロパティを指定します。
Web.config ファイルを保存して閉じます。
FavoriteURLs プロパティの設定と取得
コレクションである FavoriteURLs プロパティを操作する方法は、他の状況でコレクションを操作する方法と似ています。ここでは、このチュートリアルの「PostalCode プロパティの設定と取得」で作成した Profiles.aspx ページに、ユーザーが URL を入力できる TextBox コントロールを追加することにより、このページを更新します。ユーザーが [追加] をクリックすると、URL が FavoriteURLs プロパティに追加されます。また、現在のお気に入りの URL の一覧をドロップダウン リスト ボックスに表示します。
FavoriteURLs プロパティを設定および取得するには
Profiles.aspx ページに次のコントロールを追加し、以下の表に示すようにプロパティを設定します。
コントロール
プロパティの設定
TextBox
ID = textFavoriteURL
Button
ID = AddURL
Text = Add URL
ListBox
ID = listFavoriteURLs
ソース ビューに切り替え、次の属性が存在しない場合は、Add URL ボタンにこの属性を追加します。
OnClick="AddURL_Click"
Add URL の Click ハンドラを作成し、次の強調表示されたコードを追加します。
Sub AddURL_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Dim urlString As String = _ Server.HtmlEncode(textFavoriteURL.Text) If Profile.FavoriteURLs Is Nothing Then Profile.FavoriteURLs = New _ System.Collections.Specialized.StringCollection End If Profile.FavoriteURLs.Add(urlString) DisplayFavoriteURLs() End Sub
void AddURL_Click(object sender, System.EventArgs e) { String urlString = Server.HtmlEncode(textFavoriteURL.Text); if(Profile.FavoriteURLs == null) { Profile.FavoriteURLs = new System.Collections.Specialized.StringCollection(); } Profile.FavoriteURLs.Add(urlString); DisplayFavoriteURLs(); }
Page_Load ハンドラに次の強調表示されたコード行を追加します。
Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) labelPostalCode.Text = Profile.PostalCode DisplayFavoriteURLs() End Sub
void Page_Load(object sender, System.EventArgs e) { labelPostalCode.Text = Profile.PostalCode; DisplayFavoriteURLs(); }
次のサブルーチンを追加して、ListBox コントロール内の URL の表示を更新します。
Sub DisplayFavoriteURLs() listFavoriteURLs.DataSource = Profile.FavoriteURLs listFavoriteURLs.DataBind() End Sub
void DisplayFavoriteURLs() { listFavoriteURLs.DataSource = Profile.FavoriteURLs; listFavoriteURLs.DataBind(); }
FavoriteURLs プロファイル プロパティのテスト
ここで FavoriteURLs プロパティをテストできます。
FavoriteURLs プロパティをテストするには
Ctrl キーを押しながら F5 キーを押して Profiles.aspx ページを実行します。
最初は、ListBox コントロールに値はありません。
ボックスに URL を入力し、[追加] をクリックします。
URL が ListBox コントロールに追加されます。
前の手順を繰り返して、別の URL を追加します。
ブラウザを閉じます。
ブラウザを再度開き、Profiles.aspx ページを開きます。
ブラウザを閉じる前に入力した URL が、ListBox コントロールに設定されています。
ログオン時のプロファイル プロパティの移行
ユーザーが最初に匿名ユーザーとしてサイトにアクセスし、その後でログオンした場合、そのユーザーが匿名ユーザーだった時点で設定したプロパティ設定値を保持する必要があることがあります。一般的な例としては、ショッピング サイトのユーザーが匿名ユーザーとしてページを表示し、買い物カゴにアイテムを追加した後で、ログオンしてチェックアウトする場合があります。ユーザーがログオンしたときにユーザーの値を保持するには、現在の匿名ユーザーのプロファイルから、ログオンしている (認証済み) ユーザーのユーザー プロファイルにユーザーを移行します。
このセクションでは、ユーザーの PostalCode 設定を移行します。ユーザー ID を使用するように既に構成済みで、ログオン ページのある Web サイトが必要です。操作する Web サイトがまだメンバシップ用に構成されていない場合は、次の手順を実行して、メンバシップを有効にします。既にサイトでメンバシップがサポートされている場合は、次のセクションに進んでください。
メンバシップ用に Web サイトを構成するには
Visual Studio で、[Web サイト] メニューの [ASP.NET の構成] をクリックします。
Web サイト管理ツールが表示されます。
[セキュリティ] タブをクリックします。
[セキュリティ] をクリックし、[ユーザー] の [認証の種類の選択] をクリックします。
[インターネットから] をクリックし、[終了] をクリックします。
[インターネットから] によって、アプリケーションでフォーム認証を使用することが指定されます。この場合、ユーザーはログオン ページを使用してアプリケーションにログオンします。
[セキュリティ] タブの [ユーザー] の下の [ユーザーの作成] をクリックし、ユーザー アカウントを作成します。
任意の名前とパスワードを使用できますが、使用した名前とパスワードを忘れないようにしてください。電子メール アドレスについては、独自のアドレスを使用します。ただし、このチュートリアルでは電子メールを送信しません。
ユーザー アカウントの定義が終わったら、Web サイト管理ツールを閉じます。
ツールボックスの [ログイン] グループから、Login コントロールおよび LoginName コントロールをページにドラッグします。
LoginName コントロールはログオンには必要ありませんが、これを使用すると、ログオンしていることを確認できます。
移行ハンドラの作成
匿名ユーザーの設定を、ログオンしているユーザーの設定に移行するには、ユーザーの ID の変更時に移行を行う必要があります。ASP.NET では、このために MigrateAnonymous イベントが用意されています。MigrateAnonymous イベントのハンドラで、保持する必要がある設定を移行できます。
移行ハンドラを作成するには
ソリューション エクスプローラで、Web サイトの名前を右クリックし、[新しい項目の追加] をクリックします。
[Visual Studio にインストールされたテンプレート] の [グローバル アプリケーション クラス] をクリックし、[追加] をクリックします。
このファイルは常に Global.asax と名付けられるので、名前を入力する必要はありません。
以下のコードを入力し、MigrateAnonymous イベントの新しいハンドラを作成します。
Sub Profile_MigrateAnonymous(ByVal sender As Object, _ ByVal e As ProfileMigrateEventArgs) If Profile.GetProfile(e.AnonymousID).PostalCode <> "" Then Profile.PostalCode = _ Profile.GetProfile(e.AnonymousID).PostalCode End If End Sub
void Profile_MigrateAnonymous(Object sender, ProfileMigrateEventArgs e) { if(Profile.GetProfile(e.AnonymousID).PostalCode != String.Empty) { Profile.PostalCode = Profile.GetProfile(e.AnonymousID).PostalCode; } }
このコードは、匿名ユーザーのユーザー プロファイルを取得し、PostalCode 値を抽出します。その後で、新規ユーザー ID のプロファイルを取得し、その ID に対して等しい値を設定します。
移行のテスト
移行をテストするには、最初に匿名ユーザーとしていくつかの設定を行う必要があります。その後で、ログオンし、値が保持されていることを確認します。
移行をテストするには
Profiles.aspx ページを開き、Ctrl キーを押しながら F5 キーを押してページを実行します。
まだログオンしていないので、LoginName コントロールには何も表示されません。
ページに郵便番号が表示されない場合は、新しい郵便番号を入力し、[Set Postal Code] をクリックします。
現在の匿名 ID 用の郵便番号がページに表示されます。
このチュートリアルの「ログオン時のプロファイル プロパティの移行」で作成したユーザー名とパスワードを使用してログオンします。
LoginName コントロールにユーザー名が表示されます。郵便番号の設定値はログオンしているユーザー プロファイルに移行されたので、匿名ユーザーとして入力した郵便番号が引き続き表示されています。
次の手順
このチュートリアルでは、Web アプリケーションでの Profile プロパティの構成方法と使用方法に関する基本的な手順を示しました。Profile プロパティは、アプリケーションでさまざまな用途に使用できます。Profile プロパティのその他の操作の例を次に示します。
Profile プロパティをグループ化します。グループ化すると、Profile プロパティを 1 つの単位として操作しやすくなります。
たとえば、Street、City、および PostalCode という名前の 3 つの Profile プロパティを Address という名前のグループにまとめることができます。
詳細については、「ASP.NET プロファイル プロパティの定義」を参照してください。
Profile プロパティを使用して管理する、買い物カゴなどのカスタム型を作成します。
詳細については、「ASP.NET プロファイル プロパティの定義」を参照してください。
別のプロファイル プロバイダを選択します。
このチュートリアルでは、Profile 値を SQL Server Standard Edition データベースに保管しました。多数のユーザーをサポートする実際のアプリケーションでは、SQL Server データベースに Profile プロパティのデータを格納することをお勧めします。この場合、SqlProfileProvider クラスを使用します。
詳細については、「Web サイト管理ツールの [プロバイダ] タブ」および「SQL Server 向けアプリケーション サービス データベースの作成」を参照してください。
また、自分でコーディングした形式およびストレージ メディアで情報を格納するカスタム プロファイル プロバイダを作成することもできます。
詳細については、「プロファイル プロバイダの実装」を参照してください。