以下代码在多用户Web应用程序中是否安全?

时间:2015-09-22 13:09:54

标签: c# asp.net session

如果没有,有没有办法让它安全?即使它使用会话中的内容填充了类成员,公共类是不是静态的?这意味着当多个用户同时访问应用程序时,类/成员可能会来回弹跳......对吗?我错过了什么?

取自@M4N此处:https://stackoverflow.com/a/621620/158050

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;

1 个答案:

答案 0 :(得分:2)

即使MySession.Current是静态的,它也不是直接存储数据。相反,它使用HttpContext.Current.Session特定于每个用户的会话,因此它与HttpContext.Current.Session对象通常一样安全。