0

修正しようとしているバグがあります。あるユーザーが、同じ aspx ページに同時にアクセスすると、別のユーザーのデータを見ることができるようです。

マスター ページのプロパティにデータを格納すると、同時に実行されているすべてのページでそのデータが表示されるのでしょうか。

マスター ページを用意します。

public class MyMasterBase : System.Web.UI.MasterPage
{
    private int myInt;
}

aspx ページからマスター ページへの参照を作成します。

MyMasterBase master = Page.Master as MyMasterBase;

次に、2 人のユーザーが同時に aspx ページを呼び出します。

  • 最初のユーザーが myInt を 1 に設定します
  • 2 番目のユーザーは myInt を 2 に設定します
  • 最初のユーザーが myInt 値を読み取った場合、それは何になりますか?

1になると思いますが、2の場合はバグを説明します:)

ありがとう

シラーズ

4

2 に答える 2

1

私にはキャッシュの問題のように聞こえます。MasterPage はセッション間でデータを保持しませんが、キャッシュは保持します。情報をキャッシュに入れているプロジェクトのあらゆる場所を見つけて、ユーザーまたはセッション固有のデータがそこに入らないようにします。キャッシュは、特定の時点ですべてのユーザーに適用される情報のみを保持する必要があります。

于 2009-12-01T16:35:54.110 に答える
1

それはあなたが何をするかによって異なりますmyInt。その値をセッションに保存する場合は、ユーザーの ID ( Page.User.Identity.Name) を確認します。それらが等しい場合は、最新の設定値を読み取ります。ViewState に保存すると、各ユーザーは自分の値を読み取ります。まったく永続化しない場合(その場合だと思います)、値は保存されません(各ユーザーのリクエストごとにリセットされます)。おそらく、あなたが望むのは次のようなものです(単なる推測です):

int property MyInt {
    get { return Convert.ToInt32(ViewState["MyInt"]);}
    set { ViewState["MyInt"] = value; }
}
于 2009-12-01T16:54:27.237 に答える