我正在尝试为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 以这种方式使用会话,否则我的请求将被搞砸,所有会话信息将在所有会话中共享请求?