浏览器关闭后,会话变为空

时间:2013-02-22 00:07:37

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我使用以下代码检索跨页面的登录用户身份

// 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);
    }

3 个答案:

答案 0 :(得分:2)

您必须始终准备好清除会话状态。例如,如果更改了web.config文件,则将回收工作进程,并且将丢失所有进程内会话状态。您可以通过使用进程外会话状态来缓解这种情况,但是,作为最佳做法,您应该随时准备丢失会话。

答案 1 :(得分:1)

您只需要检查您是否已登录,因为您的Cookie已保留。它与会话有关,因为除非您在DB或状态中存储会话,否则在关闭浏览器后会话将永远不会存在

答案 2 :(得分:0)

正如之前的回复声明,您无法在会话状态回复,以便在浏览器关闭后仍然有效。 以下两篇文章应该有所帮助

ASP.NET Session State Overview

ASP.NET State Management Recommendations