Почему мои пользователи выходят из системы после перезапуска сеанса? - PullRequest
0 голосов
/ 22 октября 2011

У меня есть это приложение, которое использует пользовательские методы для регистрации и входа пользователей с помощью 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;

Я что-то здесь упускаю? Я считаю, что с этим кодом должно иметь значение, если сессия перезапускается, мои пользователи должны оставаться в системе.

Заранее спасибо.

1 Ответ

0 голосов
/ 27 октября 2011

Это так, как сказал Мистер Мэн.Имя файла cookie генерировалось заново при каждой перезагрузке сеанса, поэтому приложение искало файл cookie с именем, отличным от того, которое было раньше.

Для спокойствия всех вас, кто помог мнеи для разработчика, который будет поддерживать это приложение в будущем, я реорганизовал его, чтобы оно больше не было таким «злом»: P

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...