1. ホーム
  2. c#

[解決済み] ASP.NETで任意のクラスからセッション変数にアクセスする方法は?

2022-04-24 01:23:32

質問

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

Session["loginId"]

このセッション変数に自分のクラスでアクセスしたいのですが、次の行を書くとエラーになります。

Session["loginId"]

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

どのように解決するのですか?

(完全性を保つために更新)

どのページやコントロールからでも、セッション変数にアクセスするには 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 doc コメントを追加することで、セッション アイテムを文書化することができます。
  • セッション変数をデフォルト値で初期化することができます(例:NULLでないことを保証する)。