Проверка подлинности Asp.net MVC отмечена без создания файла cookie авторизации - PullRequest
0 голосов
/ 23 сентября 2009

Я аутентифицирую пользователя в своем приложении с помощью метода «FormsAuthentication.SetAuthCookie», но когда я закрываю браузер и снова открываю его, он все еще аутентифицируется, но сеанс уже завершен, и мое приложение аварийно завершает работу, поскольку имеет необходимые данные о сеансе для создания меню.

Я хочу сделать следующее: создать заявку на аутентификацию без создания файла cookie для проверки подлинности, чтобы каждый раз, когда пользователь открывает страницу в новом сеансе браузера, он снова запрашивает логин.

Как мне этого добиться.

Ответы [ 3 ]

4 голосов
/ 23 сентября 2009

Сессии и аутентификация разные. Если вы хотите, чтобы файл cookie исчезал при закрытии браузера, используйте

FormsAuthentication.SetAuthCookie("username", false);
2 голосов
/ 23 сентября 2009

Открыты ли другие окна браузера? Иногда, если открыты другие окна браузера, cookie сохраняется.

0 голосов
/ 25 января 2013

В файлах cookie или сеансе нет свойств, срок действия которых истекает при закрытии браузера. Они контролируются только временем истечения срока (что-то, о чем должен был думать тот, кто определил стандарты для файлов cookie).

Передача false в SetAuthMethod не скажет браузеру удалить cookie при закрытии браузера. Фактически, если в браузере включена опция возврата к оставленным вкладкам, он снова откроет эти вкладки со всеми файлами cookie, которые были там. Если срок действия этих файлов cookie для аутентификации еще не истек, вы сами войдете в систему.

Что вы можете сделать, это указать другое время истечения срока действия, когда пользователь проверяет «Запомнить меня» по сравнению с тем, когда он его не проверяет:

// create this private method.
private void SetAuthCookie(string emailAddress, bool keepMeLoggedIn)
{
    int timeout = keepMeLoggedIn ? 525600 : 20; // Timeout in minutes, 525600 = 365 days.
    var ticket = new FormsAuthenticationTicket(emailAddress, keepMeLoggedIn, timeout);
    string encrypted = FormsAuthentication.Encrypt(ticket);
    var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encrypted);
    cookie.Expires = System.DateTime.Now.AddMinutes(timeout);
    cookie.HttpOnly = true; // cookie not available in JavaScript.
    HttpContext.Response.Cookies.Add(cookie);
}

// use it instead of FormsAuthentication.SetAuthCookie(model.username, model.RememberMe);
SetAuthCookie(model.username, model.RememberMe);
...