Asp.net mvc 使用mvc中的属性分配会话值

Asp.net mvc 使用mvc中的属性分配会话值,asp.net-mvc,session,Asp.net Mvc,Session,所以,这是我的想法。我有一个SessionCache类,用于获取和设置会话变量,这是简单的用户信息。因此,我希望在用户成功登录后设置会话值,并使用该类在整个应用程序中获取会话值。但不知怎的,我无法在SessionCache类中将值设置为会话变量 public class SessionCache { public static string SessionID { get { return HttpContext.Curre

所以,这是我的想法。我有一个SessionCache类,用于获取和设置会话变量,这是简单的用户信息。因此,我希望在用户成功登录后设置会话值,并使用该类在整个应用程序中获取会话值。但不知怎的,我无法在SessionCache类中将值设置为会话变量

public class SessionCache
{
    public static string SessionID
    {
        get
        {
            return HttpContext.Current.Session.SessionID;
        }
    }
    public static CurrentUserVM CurrentUser
    {
        get
        {
            return (CurrentUserVM)HttpContext.Current.Session["CurrentUser"];
        }
        set
        {
            HttpContext.Current.Session["CurrentUser"] = CurrentUser;
        }
    }
}
因此,我尝试在登录操作中使用上述类设置值,如下所示:

CurrentUserVM currentUser = new CurrentUserVM();
currentUser.User = db.userClass.FirstOrDefault(m => m.EmailID.Equals(objLogin.EmailID));
currentUser.isAuthenticated = true;
SessionCache.CurrentUser = currentUser;
SessionCache.CurrentUser.isAuthenticated = currentUser.isAuthenticated;

但是SessionCache.CurrentUser仍然为空。我的代码有问题吗?

我认为问题很明显。只要简单地改变这个

HttpContext.Current.Session["CurrentUser"] = CurrentUser;
进入这个

HttpContext.Current.Session["CurrentUser"] = value;

尝试HttpContext.Current.Session[CurrentUser]=value;不过,这是一个非常糟糕的主意,至少对于您存储的数据来说是这样。诸如用户是否经过身份验证之类的内容不应存储在会话中。可以通过User.Identity.IsAuthenticated随时检索,所以没有理由这样做。用户的电子邮件地址等信息应始终来自数据库。检索用户记录的成本非常低,特别是因为实体框架使用了自己的查询缓存,然后,你不必负责在会议中始终更新内容。我完全同意你在那里说的任何话。但这并不涉及大量数据,只是在登录后将用户重定向到网站的不同部分。我在这里使用的用户数据不多。此应用程序太简单,无法使用Identity。但谢谢无论如何。@chrispratt我到底在想什么..嘘,谢谢you@Mash,不客气,如果这个答案能解决你的问题,别忘了把它标记为答案。谢谢: