web-dev-qa-db-ja.com

Asp.netセッション変数

私は、背後にc#コードを含むasp.netプロジェクトがあります。たとえば、現在選択されている製品など、いくつかの情報を格納するGlobalVariableという静的クラスがあります。

しかし、ウェブサイトを使用しているユーザーが2人いる場合、選択した製品を変更した場合、すべてのユーザーが変更した場合に、静的変数は誰でも共有できるようです。

(c#コードから)c#コードからだけでなく、ページからだけでなく任意のクラスからも使用されるある種のセッション変数を作成したいと思います。

13
Amaranth

はい、静的変数はアプリケーション全体で共有されます。これらはユーザー/セッションにプライベートではありません。

非ページクラスからSessionオブジェクトにアクセスするには、HttpContext.Current.Sessionを使用する必要があります。

28
driis

GlobalVariableは誤解を招く名前です。それが何と呼ばれていても、セッションごとの場合はstaticであってはなりません。代わりに次のようなことができます:

// store the selected product
this.Session["CurrentProductId"] = productId;

Sessionコレクションをグローバルにアクセスできるようにしてはいけません。むしろ、必要なデータのみを渡し、必要に応じてSessionを使用して取得/設定します。

MSDNの ASP .NETのセッションストレージ での作業の概要を次に示します。

9
Yuck

あなたは自分の質問に答えました。答えはセッション変数にあります。 GlobalVariableクラスには、セッション変数に基づくプロパティを配置できます。

例:

public string SelectedProductName 
{
    get { return (string)Session["SelectedProductName"]; }
    set { Session["SelectedProductName"] = value; }
}
8
Khan