.NET Core Singleton Session Wrapper

时间:2018-03-15 15:36:02

标签: c# asp.net session singleton asp.net-core-2.0

我正在尝试为ASP.NET Core Razor Pages创建一个Session Wrapper类。

在传统的ASP.NET Web表单中,我的单例会话包装器类用于正常工作,但我不确定在.net核心中它是否可以工作相同或相同的类将在所有请求中共享。 我想为每个请求(会话)存储特定信息,而不是在所有请求中共享。

我创建了以下包装器:

public class MySession
{
    //the ISession interface mandatory
    public ISession Session { get; set; }


    private static MySession instance;

    private MySession() {
    }

    public static MySession Instance
    {
        get
        {
            if (instance == null)
            {
                instance = new MySession();
            }
            return instance;
        }
    }


    //properties
    public User User
    {
        get => SessionHelper.SessionExtensions.Get<User>(this.Session, "User");
        set => SessionHelper.SessionExtensions.Set<User>(this.Session, "User", value);
    }
    public bool LoggedIn
    {
        get => SessionHelper.SessionExtensions.Get<bool>(this.Session, "LoggedIn");
        set => SessionHelper.SessionExtensions.Set<bool>(this.Session, "LoggedIn", value);
    }
}

从我的页面模型(Login.cshtml.cs)我正在执行以下操作:

public void OnGet()
    {
        MySession.Instance.Session = HttpContext.Session;
    }

我正在访问会话并按预期完美地存储和检索信息,例如:

public ActionResult OnPostAuthenticate()
        {
            string username = Request.Form["username"];
            string password = Request.Form["password"];

            User user = this.userDataManager.GetUserAuthentication(username, password);

            if (user != null)
            {
                //authentication success

                //save session variables
                MySession.Instance.User = user;
                MySession.Instance.LoggedIn = true;

                return new JsonResult(new { success = true });
            }
            else
            {
                return new JsonResult(new { success = false });
            }
        }

正如我所说的一切都很完美,但我想知道是否 SAFE 以这种方式使用会话,否则我的请求将被搞砸,所有会话信息将在所有会话中共享请求?

0 个答案:

没有答案