Cookie asp.net, аутентификация и тайм-ауты сессии

Я думаю, что viewWillAppear - лучшее место для загрузки данных из API. Поскольку viewDidLoad вызывается один раз при загрузке представления, но viewWillAppear вызывается, когда он загружается из родительского представления или дочернего представления.

33
задан danifo 18 January 2009 в 04:02
поделиться

4 ответа

Избегайте использования сессии так, как Вы можете, если можно уйти без seesion, это делает мультиразвертывания серверов qutie немного легче. Вероятно, Имя и адрес электронной почты легкие кандидаты на cookie. Легко фальсифицировать cookie, таким образом, идентификатор пользователя не может быть хорошей идеей в зависимости от Ваших потребностей безопасности.

cookie аутентификации форм шифруются, и можно добавить дополнительные данные к тем cookie (См. детали ниже). Это, вероятно, hackable, но совсем не так же легко как простой cookie.

Вот код, который я использовал в прошлом, немного измененном для удаления некоторых определенных деталей проекта. Назовите это в событии LoggedIn управления входом в систему.

void AddUserIDToAuthCookie(string userID)  
{  
  //There is no way to directly set the userdata portion of a FormAuthenticationTicket  
  //without re-writing the login portion of the Login control  
  //  
  //I find it easier to pull the cookie that the Login control inserted out  
  //and create a new cookie with the userdata set  

  HttpCookie authCookie = Response.Cookies[AUTH_COOKIE];
  if(authCookie == null)
  {
    return;
  }

  Response.Cookies.Remove(AUTH_COOKIE);

  FormsAuthenticationTicket oldTicket = FormsAuthentication.Decrypt(authCookie.Value);
  var newTicket =
    new FormsAuthenticationTicket(oldTicket.Version, oldTicket.Name, oldTicket.IssueDate, oldTicket.Expiration,
                                  oldTicket.IsPersistent, userID, oldTicket.CookiePath);

  authCookie.Value = FormsAuthentication.Encrypt(newTicket);

  Response.Cookies.Add(authCookie);
}

к вашему сведению, я скопировал это со старого проекта и отредактировал его здесь для удаления некоторых определенных битов проекта, таким образом, он не может скомпилировать, но это будет очень близко.

Для получения идентификатора на веб-странице...

FormsAuthenticationTicket ticket = ((FormsIdentity) Page.User.Identity).Ticket;
string id = ticket.UserData;

я использовал этот механизм для хранения идентификатора, который не был частью aspnetdb пользовательских данных. Если все Ваши данные идентификационных данных обрабатываются aspnetdb, Вы, возможно, только должны получить доступ к Странице. Пользователь. Объект идентификационных данных.

19
ответ дан 27 November 2019 в 17:15
поделиться

Технически из-за тайм-аута сессии asp.net Ваш пользователь не должен выйтись из системы. Это должно / управляемое cookie аутентификации форм.

Вся важная информация, связанная с аутентификацией пользователя, должна храниться в свойстве USERDATA билета аутентификации форм. Это значение не должно быть сохранено на сессии как сессия.

Только сохраняют, они оценивают на сессии, которая recreatable.

Так, при создании форм authetication cookie, можно передать всю важную информацию как часть билета.

-

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

тайм-аут сессии автоматически расширяется с помощью каждого запроса на сайт.

принимая во внимание, что аутентификация Форм расширяет свое время только после того, как 50% времени протекли.

Вот подробная информация об этом: аутентификация FAQ

Форм самая простая вещь сделать состоит в том, чтобы расширить время аутентификации Форм в пользовательском HttpModule или базовой странице, каков когда-либо Ваш дизайн.

Таким образом Ваш тайм-аут всегда будет в синхронизации, хотя может быть некоторый небольшой разрыв.

2
ответ дан 27 November 2019 в 17:15
поделиться

Лично, я сохранил бы 20-минутное значение по умолчанию и добавил бы "поддерживать" функциональность к Вашему сайту. Сделайте простой JavaScript, который опрашивает, скажем heartbeat.aspx, каждые 5 минут для поддержания сессии. Это расширит сессию и аутентификацию, не сохраняя сумасшедшие аутентификационные маркеры.

существует несколько примеров (плохо, по-моему) того, как сделать это. Я закончил тем, что использовал что-то на основе предотвращение тайм-аута сессии AjaxLines . Вместо того, чтобы пользоваться ajax библиотекой, тем не менее, я просто использовал запрос xhtml непосредственно. Ничто не действительно необходимо больше, чем синхронизированный вызов JavaScript к GET на странице heartbeat.

4
ответ дан 27 November 2019 в 17:15
поделиться

Ничего на самом деле не пробуя самостоятельно, существует несколько вещей, которые я проверил бы.

  • Использование метод/перегрузка класса FormsAuthentication, который позволяет Вам устанавливать персистентный cookie. Хотя, по моему скромному мнению, это - общая любезность, чтобы позволить Вашим пользователям принимать решение проверить, "помнят меня" поле, а не вынуждают их быть постоянно зарегистрированными. Существует много методов, которые позволяют Вам делать это на основе того, какое поведение Вы хотите - SetAuthenticationCookie () и RedirectFromLoginPage () являются первыми, которые приходят на ум.

  • Выезд FormsAuthentication. GetAuthenticationCookie (). Это генерирует cookie HTTP с аутентификационным маркером, но не на самом деле установит его, который должен позволять Вам изменять то, что Вы хотите - хотя, если модуль FormsAuthentication ищет определенное значение, смешивая с ним, мог бы повредить аутентификацию. Необходимо будет затем добавить cookie к набору cookie в ответе вручную.

0
ответ дан 27 November 2019 в 17:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: