2012-03-08 20 views
11

私はasp.netプロジェクトをC#コードの背後にあります。 GlobalVariableという静的なクラスがあります。ここでは、現在選択されている製品のような情報をいくつか保存しています。Asp.netセッション変数

しかし、私は、2人のユーザーがウェブサイトを使用しているときに、選択した製品を変更すると、誰にでも変更されることがわかりました。静的変数は皆に共通しているようです。

私はC#コードからだけでなく、ページからではなく、どのクラスからでも使用される何らかの種類のセッション変数を作成したいと考えています。

+0

静的変数は、アプリケーション全体でアクセスされます。セッションは、ユーザーのログインとログアウト内に変数を格納およびアクセスするために使用されます。データベースを使用して、変数のセッションおよびアプリケーションの存続期間を延長します。複数のアプリケーション間でデータを共有するには、分散キャッシュを使用し、[ASP.NETセッション](http://www.alachisoft.com/ncache/session-index.html)をキャッシュに保存します。 –

答えて

22

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

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

+0

うわー、とてもシンプルです^^ありがとうございました。 – Amaranth

+3

@マチューすべてのリクエストに対して常にセッションが作成されるわけではないので、nullをチェックすることを忘れないでください。たとえば、.ashxファイルのような単純なハンドラは、Sessionオブジェクトを作成するためにデフォルトでは設定されていません。 –

+0

Apropos、http://stackoverflow.com/questions/1382791/asp-net-what-to-do-if-current-session-is-null/1382811#1382811 – driis

8

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

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

あなたはどちらかSessionコレクションは世界的にアクセスできるようにしようとしないはずです。むしろ、適切な場合はSessionを使用して、必要なデータのみを渡して取得/設定してください。

MSDNのsession storage in ASP .NETで作業することの概要を以下に示します。

+0

セッションの使い方の例を提供していただきありがとうございます。 – Ernest

7

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

例:

public string SelectedProductName 
{ 
    get { return (string)Session["SelectedProductName"]; } 
    set { Session["SelectedProductName"] = value; } 
} 
関連する問題