我有一个使用表单身份验证的应用程序,当用户登录时,我检索用户的实际名称并将其分配给会话变量,如下所示:
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (Membership.ValidateUser(model.UserName, model.Password))
{
Session["Name"] = client.GetName(model.UserName);
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
return RedirectToAction("Index", "Home");
}
}
}
然后它会显示在我的索引视图上,如下所示:
<h3>Welcome, @Session["Name"]</h3>
因此,如果我的名字是 Bob,它会在我的视图上输出“Welcome, Bob”,这很好用。但是一旦我离开页面或关闭浏览器并在几分钟后返回,似乎这些 Session 变量已被破坏,因为它只是输出“欢迎”,但我仍然登录,所以我的会话没有被破坏?我在 web.config 中将会话设置为 60 分钟后销毁:
<sessionState regenerateExpiredSessionId="true" timeout="60" />
编辑
仅当我在登录时选中“记住我”框时才会发生这种情况,因为我猜这会保留一个 cookie 客户端,所以当我重新打开浏览器时,我仍然登录,但创建了一个新的会话 ID,就像我Response.Write(Session.SessionID)
在我的关闭浏览器之前的索引页面和 ID 与我重新打开浏览器时的不同。如果我没有选中“记住我”框,那么我将在重新打开浏览器时被迫再次登录