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

本文关键字:会话 浏览器 | 更新日期: 2023-09-27 18:00:41

我使用以下代码在页面中检索登录用户标识

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

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

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

您只需要在cookie被持久化时检查是否已登录。它与会话无关,因为在您关闭浏览器后,会话将永远不存在,除非您将会话存储在数据库中或状态

由于先前的回复状态,您无法在会话状态下回复,以便在浏览器关闭后仍然有效。以下两篇文章应该有助于

ASP.NET会话状态概述

ASP.NET状态管理建议

Tim