ASP.NET の任意のクラスからセッション変数にアクセスするにはどうすればよいでしょうか? 質問する

ASP.NET の任意のクラスからセッション変数にアクセスするにはどうすればよいでしょうか? 質問する

アプリケーションのApp_Codeフォルダにクラスファイルを作成しました。セッション変数があります

Session["loginId"]

クラス内でこのセッション変数にアクセスしたいのですが、次の行を書くとエラーが発生します

Session["loginId"]

ASP.NET 2.0 (C#) の app_code フォルダーに作成されたクラス内のセッション変数にアクセスする方法を教えてください。

ベストアンサー1

(完全性のために更新)任意のページまたはコントロールから、および任意のクラス(たとえばクラスライブラリ内)から
セッション変数にアクセスできます。Session["loginId"]System.Web.HttpContext.Current.Session["loginId"].

しかし、私の本来の答えについては、ぜひ読み続けてください...


セッション変数へのアクセスを簡素化するために、私は常に ASP.NET セッションのラッパー クラスを使用します。

public class MySession
{
    // private constructor
    private MySession()
    {
      Property1 = "default value";
    }

    // Gets the current session.
    public static MySession Current
    {
      get
      {
        MySession session =
          (MySession)HttpContext.Current.Session["__MySession__"];
        if (session == null)
        {
          session = new MySession();
          HttpContext.Current.Session["__MySession__"] = session;
        }
        return session;
      }
    }

    // **** add your session properties here, e.g like this:
    public string Property1 { get; set; }
    public DateTime MyDate { get; set; }
    public int LoginId { get; set; }
}

このクラスは、ASP.NET セッションに自身のインスタンスを 1 つ保存し、次のように任意のクラスからタイプ セーフな方法でセッション プロパティにアクセスできるようにします。

int loginId = MySession.Current.LoginId;

string property1 = MySession.Current.Property1;
MySession.Current.Property1 = newValue;

DateTime myDate = MySession.Current.MyDate;
MySession.Current.MyDate = DateTime.Now;

このアプローチにはいくつかの利点があります。

  • 多くの型変換からあなたを救ってくれます
  • アプリケーション全体でハードコードされたセッションキーを使用する必要はありません(例:Session["loginId"]
  • MySessionのプロパティにXMLドキュメントコメントを追加することで、セッションアイテムを文書化できます。
  • セッション変数をデフォルト値で初期化することができます(例えば、nullではないことを保証するなど)

おすすめ記事