У меня есть приложение, которое использует аутентификацию формы, и когда пользователь входит в систему, я получаю фактическое имя пользователя и назначаю его переменной сеанса, например так:
[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");
}
}
}
Затем это отображается в моем представлении Index, вот так:
<h3>Welcome, @Session["Name"]</h3>
Итак, если бы меня звали Боб, в моем представлении было бы выведено «Добро пожаловать, Боб», и это работает нормально. Но как только я ухожу со страницы или закрываю браузер и возвращаюсь через несколько минут, кажется, что эти переменные сеанса были уничтожены, поскольку он просто выводит «Добро пожаловать», но я все еще вошел в систему, поэтому мой сеанс не уничтожен? Я установил, что сеанс будет уничтожен через 60 минут в моем web.config:
<sessionState regenerateExpiredSessionId="true" timeout="60" />
Это происходит только тогда, когда я устанавливаю флажок «Запомнить меня» при входе в систему, так как я предполагаю, что это сохраняет клиентскую часть cookie, поэтому когда я повторно-открываю свой браузер, я все еще вхожу в систему, но создается новый идентификатор сеанса, как я сделал Response.Write(Session.SessionID)
на своей странице индекса, и идентификатор перед закрытием браузера отличался от того, который был при-открыл его. Если я не поставлю галочку в поле «Запомнить меня», то мне придется снова войти в систему при повторном -открытии моего браузера