У меня есть это приложение, которое использует пользовательские методы для регистрации и входа пользователей с помощью FormsAuthentication. Сервер, на котором это размещено, имеет политику перезапуска сеансов каждые 15 минут, и когда это происходит, все мои пользователи выходят из системы. Код для входа в систему пользователя:
var user = this.accountRepo.GetUser(id);
// Create the forms authentication cookie
var cookieValue = user.name;
HttpCookie cookie = FormsAuthentication.GetAuthCookie(cookieValue, true);
// Dercrypt the cookie
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value);
// Create a new ticket with the desired data
FormsAuthenticationTicket newTicket = new FormsAuthenticationTicket
(
ticket.Version,
ticket.Name,
ticket.IssueDate,
DateTime.Now.AddYears(1),
true,
user.Authentication
);
// Update the cookies value
cookie.Value = FormsAuthentication.Encrypt(newTicket);
Response.Cookies.Set(cookie);
accountRepo.Login(user);
После создания файла cookie Forms и моих данных аутентификации, которые в основном представляют собой хешированный пароль пользователя, я затем использую следующую логику для отображения кнопки входа или имени пользователя:
@{
var accountRepo = new AccountRepository();
var user = accountRepo.GetCurrentUser();
}
@if(user != null && user.LoggedIn) {
<div>@Html.ActionLink(Context.User.Identity.Name + " - Logout", "LogOff", "Account", null, new { @class = "logout_link" })</div>
}
else
{
@Html.ActionLink("Login", "Login", "Account", new { returnUrl = Request.Url.AbsoluteUri }, new { @class = "login_link" })
}
И этот метод "GetCurrentUser ()":
var cookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
if (cookie != null)
{
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value);
return db.Users.SingleOrDefault(u => u.Authentications.Equals(ticket.UserData, StringComparison.CurrentCultureIgnoreCase));
}
return null;
Я что-то здесь упускаю? Я считаю, что с этим кодом должно иметь значение, если сессия перезапускается, мои пользователи должны оставаться в системе.
Заранее спасибо.