在会话中存储登录的用户信息

时间:2017-03-31 16:00:08

标签: asp.net-mvc session

我目前正在mvc中实现会话以存储登录的用户详细信息。我正在使用HttpContext.Current.User.Identity.Name检索用户信息,然后将该值传递给数据库以查看它是否存在。请注意,没有登录屏幕。如果用户存在,我将该值存储在会话中。

如果你看到下面的代码,我从会话启动事件调用MCRHeler类方法。从那里开始,代码非常自我解释。

我想知道是否有关于实施的建议或建议。我还想知道我是否需要处理杀戮会话,如果是,那该怎么办呢

Global.asax中

protected void Session_Start(object sender, EventArgs e)
{
    var userDetails = MCRHelper.UserDetails;

    if (userDetails != null)
        Response.RedirectToRoute("Default");
    else
        Response.Redirect("Message/Authorize",false);
}

MCRHelper上课:

public static UserDetails UserDetails
{
    get 
    {
        if (HttpContext.Current.Session["UserDetails"] == null)
        {
            if (IsUserExists())
            {
                var userSessionRepository = new SessionRepository();
                var contactDetails = userSessionRepository.GetUserProfileByNetworkId(GetShortname());
                HttpContext.Current.Session["UserDetails"] = contactDetails;
            }
        }

        return HttpContext.Current.Session["UserDetails"] as UserDetails;
    }
}

public static bool IsUserExists()
{
    using (var db = new MCREntities())
    {
        return Convert.ToBoolean(db.spUserExists(GetShortname(), GetDomain(), 1).FirstOrDefault().UserExists);
    }
}

会话资料库:

public class SessionRepository 
{
    public UserDetails GetUserProfileByNetworkId(string user)
    {
        MCREntities db = new MCREntities();

        var userProfiles = db.spGetUserProfileByNetworkID(user).FirstOrDefault(); 
        return Mapper.Map<UserDetails>(userProfiles);
    }
}

0 个答案:

没有答案