2009-09-04 8 views
3

現在、私はASP.NETのWebサイトで作業しています。私のページの1つでは、現在ログインしているユーザーのCompanyIdの静的フィールドがありました。asp.net web-siteのstaticフィールドの問題

private static Guid _CompanyId = Company.Get().CompanyId; 

Company.Get()ユーザーIDを使用して取得され、現在ログインしているユーザーの会社に関する情報を返します。

System.Web.Security.Membership.GetUser(); 

しかしantoher会社では、別のユーザーとしてログイン、Company.Get()。CompanyIdは、最初の会社からGuidを返します。

私は静的フィールドの使用のポイントを逃したのですか、これに別の原因がありますか? 私のコードビハインドで_CompanyIdへのすべての参照を、Company.Get()。CompanyIdに置き換えて修正しましたが、これは本当に良い解決策ではありません。

答えて

5

静的変数の値は、アプリケーションレベルで、したがってユーザーにとっても持続します。セッションを使用して情報を保存する必要があります。静的な変数の値は、値を再割り当てするまで変化しません。アプリケーションの再起動など。

3

セッションレベルの変数を格納するには、HttpContext.Currentを使用する必要があります。静的変数は、Webアプリケーションのすべてのセッションで表示されます。

+0

HttpContext.Current.Sessionを使用して、セッションごとの変数を格納します。合意された静的変数は、サーバ。 Webファーム環境では、HttpContext.Current.Itemsコレクションに変数を格納しても、そのデータはユーザーと共にファーム内の別のサーバーに移動することはできません。 –

+0

静的変数はユーザーと一緒には移動しませんが、アウトプロセスセッション記憶域を使用してWebファーム内のサーバー間でセッションを共有できます。 Microsoft Velocity(http://msdn.microsoft.com/en-us/data/cc655792.aspx)は、優れた分散キャッシングソリューションとして構成されています。 –

+0

しかし、このソリューションは安全ですか?コンテンツを暗号化する必要はありますか? CompanyIdは何でも変えられてはいけません – sshow

1

フィールド定義からstaticを削除すると、探しているものが表示されます。

+0

ありがとうございます。しかし、私はそれがうまくいかなかった理由の説明を探していました。 – sshow

+0

私はそうは考えていません。フィールドレベルのインスタント(非静的)であれば、セッションレベルでも永続化されないため問題は解決しません –