0

プログラムのどの部分がこのエラーを引き起こしているのかを突き止めようとしています。

から継承する複数のページがありますPageBase。からユーザー プロファイルを取得しますPageBase。これは、からユーザー名を取得する関数ですPageBase

uiProfile = ProfileManager.FindProfilesByUserName(CompanyHttpApplication.Current.Profile.UserName)

CompanyHttpApplication私が持っている

    public static CompanyHttpApplication Current
    {
        get { return (CompanyHttpApplication)HttpContext.Current.ApplicationInstance; }
    }

    public CompanyProfileInfo Profile
    {
        get
        {
            return profile ??
                   (profile =
                    ProfileManager.FindProfilesByUserName(ProfileAuthenticationOption.Authenticated,
                                                          User.Identity.Name).Cast
                        <CompanyProfileInfo>().ToList().First());
        }
        private set { profile = value; }
    }

残念ながら、私はコードのこのセクションを書きませんでした。それを行ったプログラマーは、もはやプロジェクトに参加していません。別のユーザーが (アプリケーションの使用中に) ログインすると、なぜそのユーザーになるのかを説明できる人はいますか?

4

2 に答える 2

5

HttpContext.Current.ApplicationInstance はグローバルに共有されます。ユーザーごとではありません。したがって、新しいユーザーがログインしたときに最初に設定したものをすぐに上書きする共有プロファイルがあります.

于 2012-09-28T20:03:03.337 に答える
4

Application インスタンスは、すべてのリクエスト (アプリケーション レベル) で共有されます。

セッション レベルが必要です。各ユーザーは独自のインスタンスを取得します。

ApplicationInstanceHttpContext.Current.Sessionの代わりに使用します。

(以下のコードはオリジナルの名前を変更し、より明確にするためにプロパティを追加します。必要に応じて自由に調整してください。)

public static CompanyHttpApplication CurrentApplication
{
    // store application constants, active user counts, message of the day, and other things all users can see
    get { return (CompanyHttpApplication)HttpContext.Current.ApplicationInstance; }
}

public static Session CurrentSession
{
    // store information for a single user — each user gets their own instance and can *not* see other users' sessions
    get { return HttpContext.Current.Session; }
}
于 2012-09-28T20:05:50.977 に答える