我使用以下代码检索跨页面的登录用户身份
// login method of account model
public ActionResult Login(LoginModel model)
{
Session["username"]=model.Username;
//redirect to login controler
}
并登录控制器
public ActionResult LoginLayout()
{
if(IsAdmin(Session["username"]))
return View();
else
return OtherView();
}
一切正常,直到我关闭浏览器然后重新打开它,即使我仍然被认证为登录用户,我总是会被重定向到OtherView()
。
更新
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
{
Session["username"] = model.UserName;
return RedirectToLocal(returnUrl);
}
// If we got this far, something failed, redisplay form
ModelState.AddModelError("", "The user name or password provided is incorrect.");
return View(model);
}
答案 0 :(得分:2)
您必须始终准备好清除会话状态。例如,如果更改了web.config文件,则将回收工作进程,并且将丢失所有进程内会话状态。您可以通过使用进程外会话状态来缓解这种情况,但是,作为最佳做法,您应该随时准备丢失会话。
答案 1 :(得分:1)
您只需要检查您是否已登录,因为您的Cookie已保留。它与会话有关,因为除非您在DB或状态中存储会话,否则在关闭浏览器后会话将永远不会存在
答案 2 :(得分:0)
正如之前的回复声明,您无法在会话状态回复,以便在浏览器关闭后仍然有效。 以下两篇文章应该有所帮助
ASP.NET Session State Overview
ASP.NET State Management Recommendations
添