ASP.NET プロファイル プロパティのユーザー ID
更新 : 2007 年 11 月
ASP.NET のユーザー プロファイル機能は、現在のユーザーに対して一意の情報を提供するように設計されています。プロファイルは、認証されたユーザーまたは認証されていない匿名ユーザーに対して使用できます。
認証されたユーザー
既定では、ユーザー プロファイルは現在の HTTP コンテキストの User プロパティに格納されているユーザー ID に関連付けられ、HttpContext.Current プロパティを使用してアクセスできます。ユーザー ID は、次の方法によって決まります。
認証後にユーザー ID を設定する ASP.NET フォーム認証システム。
認証後にユーザー ID を設定する Windows 認証または Passport 認証。
ユーザーの資格情報を独自に取得して管理し、ユーザー ID を手動で設定するカスタム認証。
ASP.NET フォーム認証では、ログイン フォームを作成してユーザーに資格情報の入力を求めます。ASP.NET ログイン コントロールを使用すると、コードを記述せずにログイン フォームを作成してフォーム認証を実行できます。ASP.NET の機能を使用してユーザーを認証する方法の詳細については、「ASP.NET ログイン コントロールの概要」と「メンバシップを使用したユーザーの管理」を参照してください。フォーム認証については、「方法 : 簡単なフォーム認証を実装する」を参照してください。
匿名ユーザー
プロファイルは、匿名ユーザーにも使用できます。既定では、匿名プロファイルのサポートは無効になっているため、明示的に有効にする必要があります。さらに、Web.config ファイルでプロファイル プロパティを定義する場合は、明示的に個々に匿名ユーザーを使用できるように設定する必要があります。プロファイルは認証されたユーザー用に使用される可能性があり、多くのプロパティは匿名ユーザーが使用できない個人情報に関連しているため、プロファイル プロパティは既定で匿名のアクセスをサポートしていません。
匿名 ID を有効にすると、ASP.NET は初めてサイトを訪問したユーザーに一意の ID を作成します。一意のユーザー ID は、ユーザーがページを要求するたびに識別できるように、ユーザーのコンピュータの Cookie に格納されます。Cookie の既定の有効期限は約 70 日間に設定され、ユーザーがサイトを訪問する際に定期的に更新されます。ユーザーのコンピュータが Cookie を受け入れない場合は、ユーザーの ID をページ要求の URL の一部に含めることができますが、ID はユーザーがブラウザを終了すると失われます。
匿名 ID を有効にする方法については、「anonymousIdentification 要素 (ASP.NET 設定スキーマ)」を参照してください。
匿名プロファイルの情報の移行
アプリケーションが初期状態で匿名ユーザーのパーソナル化情報を保持し、そのユーザーがその後にアプリケーションにログインすることがあります。そのような場合、ユーザーの ID は割り当てられていた匿名ユーザー ID から認証プロセスが提供する ID に変更されます。
ユーザーがログインして匿名ユーザーではなくなると、MigrateAnonymous イベントが発生します。このイベントを処理して、必要に応じてユーザーの匿名 ID から認証された新しい ID に情報を移行できます。ユーザーが認証されたときに情報を移行するコード例を次に示します。
Public Sub Profile_OnMigrateAnonymous(sender As Object, args As ProfileMigrateEventArgs)
Dim anonymousProfile As ProfileCommon = Profile.GetProfile(args.AnonymousID)
Profile.ZipCode = anonymousProfile.ZipCode
Profile.CityAndState = anonymousProfile.CityAndState
Profile.StockSymbols = anonymousProfile.StockSymbols
''''''''
' Delete the anonymous profile. If the anonymous ID is not
' needed in the rest of the site, remove the anonymous cookie.
ProfileManager.DeleteProfile(args.AnonymousID)
AnonymousIdentificationModule.ClearAnonymousIdentifier()
' Delete the user row that was created for the anonymous user.
Membership.DeleteUser(args.AnonymousID, True)
End Sub
public void Profile_OnMigrateAnonymous(object sender, ProfileMigrateEventArgs args)
{
ProfileCommon anonymousProfile = Profile.GetProfile(args.AnonymousID);
Profile.ZipCode = anonymousProfile.ZipCode;
Profile.CityAndState = anonymousProfile.CityAndState;
Profile.StockSymbols = anonymousProfile.StockSymbols;
////////
// Delete the anonymous profile. If the anonymous ID is not
// needed in the rest of the site, remove the anonymous cookie.
ProfileManager.DeleteProfile(args.AnonymousID);
AnonymousIdentificationModule.ClearAnonymousIdentifier();
// Delete the user row that was created for the anonymous user.
Membership.DeleteUser(args.AnonymousID, true);
}