1

Visual Studio 2010を使用してasp.netでカートを使用してWebサイトを作成しています。私の質問は、プロファイル変数とログインコントロールに関するものです。

私は自分のサイトにカートを追加するために非常に簡単なチュートリアルに従いました。

1ショッピングカートの例

ショッピングカートのチュートリアルでわかるように、作成者はプロファイルを使用してカートを追跡しました。

これを作成しているとき、セッション変数ではなくプロファイルを使用していたため、異なるユーザーログインごとにカートが同じままであると予想していました。幸い、ログインコントロールを使用して別のユーザーとしてログインすると、カートは実際にリセットされます。

だから私の質問は、プロファイルが各ユーザーのカートをどのように追跡しているかということです。login-controlがセッション変数を設定しないことはほぼ確実なので、Profileオブジェクトがlogin-controlとは異なるユーザーを自動検出しているとは思いません...そうですか?

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

どうもありがとう!

4

3 に答える 3

6

基本的には、認証情報を使用してユーザーを識別する方法が機能します。したがって、認証されたユーザーからリクエストが届くと、フレームワークはユーザー名(通常は認証Cookieの形式)を使用してプロファイル情報を現在のリクエストにロードします。

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

匿名ユーザーがリクエストを行うと、AnonymousIdentificationModuleモジュールはGUIDを作成し、それを.ASPXANONYMOUSという名前の永続的なCookieに書き込みます。このGUIDは、ProfileProviderの目的でユーザー名として機能します。

于 2011-07-26T16:53:50.883 に答える
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

于 2011-07-26T16:49:45.507 に答える
0

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

于 2011-08-01T21:51:07.057 に答える