2011-12-29 6 views
1

MicrosoftのProfileInfo定義http://msdn.microsoft.com/en-us/library/system.web.profile.profileinfo.aspxによれば、認証されていないprofileinfoオブジェクトにはユーザー名があります。当然のことながら、これは与えられたセッション(私はそれがセッションベースであると仮定している)でプロファイル情報を保持/参照するために使用する必要があります。私はこれがいくつかのGUIDか何かを推測していますが、どこが定義され、作成され、追跡されているかわかりません。誰かが正しい方向に私を向けることができますか?ProviderInfoオブジェクトのように見える匿名ユーザー名は何ですか?

+0

入札しないでください。私は誰かが頭の上から知っていると思っていただろう。 –

+0

どのバージョンの.NETを使用していますか? 4.0のProfileInfoクラスには、探している情報を取得するためのIsAnonymous(bool)プロパティとUserName(文字列)プロパティがあります。 http://msdn.microsoft.com/en-us/library/system.web.profile.profileinfo(v=VS.100).aspx – leanne

+0

はい、4.0、しかし、私はそれを取得する方法を知りたくありませんが、それはかなり簡単です。私はそれがどのように設定され、どのように見えるか知りたい。私はプロファイルプロバイダーを書いています。ユーザー名の作成と保守に関して、匿名プロファイルの仕組みをより明確に理解したいと思っています。 –

答えて

2

質問...私はいくつかの研究をすることにしました。私は、次のことがわかりましたMSDNの記事、

ドキュメントで掘りのビットがImplementing a Profile Providerに最初に私を導く:

GetPropertyValues方法

は、入力としてSettingsContextとSettingsPropertyCollection オブジェクトを受け取り。

SettingsContextは、ユーザーに関する情報を提供します。 の情報を主キーとして使用して、ユーザーのプロファイル情報 の情報を取得できます。 SettingsContextオブジェクトを使用して ユーザー名を取得し、ユーザーが認証済みか匿名かを確認します。 ...

したがって、ユーザーが認証されているかどうかの判断は、通常、上位レベルで行われます。とにかく、私はMicrosoftの既定のSqlProfileProviderの実装(すなわち、GetPropertyValuesメソッド実装)のコードを見ていたし、それが実際に次のコードを持つメソッドprivate void GetPropertyValuesFromDatabase(string userName, SettingsPropertyValueCollection svc)呼び出すことが判明:私たちは非があれば、それで

HttpContext context = HttpContext.Current; 
... 
string sName = null; 

if (context != null) 
    sName = (context.Request.IsAuthenticated ? context.User.Identity.Name : context.Request.AnonymousID); 

を認証された要求である場合、ユーザーIDはHttpContext.Current.Request.AnonymousIDプロパティから取得されます。 MSDNからこのプロパティを検索すると、次のページが表示されます。HttpRequest.AnonymousID property (System.Web)このIDを生成する正確なアルゴリズムについてはまだ説明していませんが、必要に応じてこのデフォルトアルゴリズムをオーバーライドする方法についての情報を提供します。 Webアプリケーションにpublic void AnonymousIdentification_Creating(Object sender, AnonymousIdentificationEventArgs e)メソッドをオーバーロードするだけです。また、このページには、AnonymousIDが通話間でどのように保持されるかについての情報があります(デフォルトでは、.ASPXANONYMOUSのクッキーに保存されています)。

例コード:

void Application_Start(Object sender, EventArgs e) 
    { 
     // Initialize user count property 
     Application["UserCount"] = 0; 
    } 

public void AnonymousIdentification_Creating(Object sender, AnonymousIdentificationEventArgs e) 
    { 
    // Change the anonymous id 
    e.AnonymousID = "mysite.com_Anonymous_User_" + DateTime.Now.Ticks; 

    // Increment count of unique anonymous users 
    Application["UserCount"] = Int32.Parse(Application["UserCount"].ToString()) + 1; 
} 

概要:私は、このIDは、デフォルトで作成される方法であなたの元の質問に答えることができていないが、私はあなたが上書きするため、最後のコードスニペットが十分になると思いますこれはあなたが必要とする任意のアルゴリズムです。

+0

Excellect。これはまさに私が探していたものでした。ありがとうございました! –

関連する問題