一尘不染

如何从ASP.NET中的任何类访问会话变量?

c#

我在应用程序的App_Code文件夹中创建了一个类文件。我有一个会话变量

Session["loginId"]

我想在我的班级中访问此会话变量,但是当我编写以下行时,它给出了错误

Session["loginId"]

谁能告诉我如何访问在ASP.NET 2.0(C#)的app_code文件夹中创建的类中的会话变量


阅读 302

收藏
2020-05-19

共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会话中存储其自身的一个实例,并允许您从任何类中以类型安全的方式访问会话属性,例如:

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文档注释来记录会话项
  • 您可以使用默认值初始化会话变量(例如,确保它们不为空)
2020-05-19