2011-07-11 8 views
1

私はvisual studio 2010を使ってasp.netのカートでWebサイトを作っています。私の質問はProfile変数とLogin Controlに関するものです。asp.netのプロファイル変数がログイン制御でセッションを追跡していますか?

私は自分のサイトにカートを追加するためのかなり簡単なチュートリアルを続けました。

1Shopping Cart Example

あなたは著者がカートを追跡するためにプロファイルを使用ショッピングカートチュートリアルで見ることができるように。

私がこれを作っていたとき、セッション変数ではなくプロファイルを使用していたので、ユーザーログインごとにカートを同じ状態に保つことを期待していました。幸運なことに、ログインコントロールを使用して別のユーザーとしてログインしたとき、カートは実際にリセットされます。

私の質問は、どのようにプロファイルが各ユーザーのカートを追跡しているかです。私はほとんどログインコントロールがセッション変数を設定しないことを確信しているので、プロファイルオブジェクトはログインコントロールから別のユーザーを自動的に検出しているとは思わない...それは?

私はこれを理解するのを手伝ってください、著者はかなり明確ではありません。

ありがとうございます!

+0

ASP.NETプロファイルを読みましたか? http://msdn.microsoft.com/en-us/library/2y3fs9xs.aspx –

+0

はい、それはピーターのようにそれを説明しません...私は何もhehのための100の賞金を投げていないでしょう。ありがとう – clamchoda

答えて

6

基本的には、認証情報を使用してユーザーを識別することです。したがって、認証されたユーザーから要求が送られると、フレームワークはユーザー名(通常は認証クッキーの形式)を使用して、プロファイル情報を現在の要求にロードします。

この例では、作成者が<anonymousIdentification enabled="true"/>を使用しているため、匿名ユーザーもプロファイル情報を利用できるようになっています。

匿名ユーザーが要求すると、AnonymousIdentificationModuleモジュールはGUIDを作成し、それを.ASPXANONYMOUSという永続Cookieに書き込みます。このGUIDは、ProfileProviderの目的のためのユーザー名として機能します。

2

カートとプロフィールを結集し、コードの重要な部分は非常に最後(すべてのログインのために舞台裏で起こる)である:

void Profile_OnMigrateAnonymous(object sender, ProfileMigrateEventArgs e) 
{ 
    ProfileCommon anonymousProfile = Profile.GetProfile(e.AnonymousID); 
    if (anonymousProfile.SCart != null) 
    { 
     if (Profile.SCart == null) 
      Profile.SCart = new ShoppingCartExample.Cart(); 

     Profile.SCart.Items.AddRange(anonymousProfile.SCart.Items); 

     anonymousProfile.SCart = null; 
    } 

    ProfileManager.DeleteProfile(e.AnonymousID); 
    AnonymousIdentificationModule.ClearAnonymousIdentifier(); 
} 

あなたは、MSDN上のプロファイルなどについて読むことができます - のために例:http://msdn.microsoft.com/en-us/library/ewfkf772.aspx

0

これはセッションに関して全く完全ではありません。セッションは、ログインしたユーザーに関する特定の情報を格納するために使用されます。ただし、ログインしたユーザーに関する情報(ログイン成功後にasp:Loginコントロールによって設定されたもの)は、HttpContext.Current.Userオブジェクトからアクセスできるプリンシパルにも格納されます。ユーザーに関する情報が格納される別の場所は、.ASPXAUTH cookieという名前のCookieにあります。したがって、ユーザー情報を取得できる場所がいくつかあります。しかし、ProfileはIPrincipal型のオブジェクトに依存します。匿名ユーザーの場合、Peter Mourfield氏は良い答えをくれたので、私は彼の言葉を繰り返さない。

関連する問題