如何在整个Asp.net MVC应用程序会话管理中维护Id值

时间:2019-01-10 16:31:17

标签: asp.net-mvc session session-cookies session-variables session-state

登录后如何在整个Asp.net MVC应用程序中维护Id值-在整个ASP.NET MVC应用程序中保持ID?

我尝试在登录控制器中使用这样的会话变量

[HttpPost]
            [ValidateAntiForgeryToken]
            public ActionResult LoginPage(UserLogin login)
            {
              else if (string.Compare(CryptoCode.Hash(login.Password), v.PPassword) == 0)
                {
                    int timeout = login.RememberMe ? 60 : 60; // 525600 min = 1 year
                    var ticket = new FormsAuthenticationTicket(login.EmailID, login.RememberMe, timeout);
                    string encrypted = FormsAuthentication.Encrypt(ticket);
                    var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encrypted);
                    cookie.Expires = DateTime.Now.AddMinutes(timeout);
                    cookie.HttpOnly = true;
                    Response.Cookies.Add(cookie);
                    var profile = db.Profile.Where(x => x.UserLoginId == v.UserLoginId).FirstOrDefault();
                    Session["PId"] = profile.PId;

                    if (Url.IsLocalUrl(login.ReturnUrl))
                    {
                        return Redirect(login.ReturnUrl);
                    }
                    else
                    {

                               return Redirect("/ProfilePage/fileupload/index");
                    }
}

在“我的另一个控制器”顶层

public ActionResult MainPage()
        {
 if (Session["PId"] != null)
        {
            Int64 pid = (Int64)System.Web.HttpContext.Current.Session["PId"];
......
......
        }
        else
        {
            return View("~/Registration/Registration/loginpage");
        }
}

在web.config文件中

<authentication mode="Forms">
<forms cookieless="UseCookies" loginUrl="~/Registration/loginpage" timeout="60" slidingExpiration="true"></forms>
</authentication>
<sessionState mode="InProc" timeout="60"></sessionState>

当我关闭浏览器时,会话值变为null,但会话登录处于活动状态,因此我得到null引用异常或pid null。

在我的应用程序中,我有许多具有许多操作方法的控制器。我不希望检查每种操作方法中的条件会话值。

如何在浏览器关闭并在会话中的给定超时(如20分钟)后重新打开后,保持会话值?

0 个答案:

没有答案