С# Очистить сеанс - программирование
Подтвердить что ты не робот

С# Очистить сеанс

Вопрос № 1

Я хочу знать, когда я должен использовать:

Session.Abandon()//Когда я использую это во время трассировки и после его вызова, я считаю, что сеанс по-прежнему имеет значение.

И когда я должен использовать:

Session.Clear()

Когда я должен использовать каждый конкретный метод?


  • В общем?
  • В моем конкретном случае?

Я проверяю, не является ли сеанс равным нулю в загрузке страницы. Если сеанс равен нулю, я хочу очистить сеанс и перенаправить на страницу входа?

Должен ли я использовать что-то вроде этого:

private void initSession()
{
    Session.Clear();
    Session.Abandon();
    Response.Redirect("LoginPage.aspx");
}
4b9b3361

Ответ 1

В ASP.NET, когда я должен использовать Session.Clear(), а не Session.Abandon()?

Session.Abandon() разрушает сеанс и событие Session_OnEnd срабатывает.

Session.Clear() просто удаляет все значения (содержимого) объекта. сеанс с тем же ключом по-прежнему жив.

Итак, если вы используете Session.Abandon(), вы потерять определенную сессию и пользователь получит новый ключ сеанса. Вы может использовать его, например, когда пользователь выходит из системы.

Используйте Session.Clear(), если вы хотите, чтобы пользователь, оставшийся на той же сессии (если вы не хотите, чтобы он переписывался пример) и reset всю свою сессию конкретные данные.

В чем разница между Session.Abandon() и Session.Clear()

Очистить - удаляет все ключи и значения из коллекции сеансового состояния.

Abandon - удаляет все объекты хранится в сеансе. Если ты не вызовите метод Abandon явно, сервер удаляет эти объекты и разрушает сеанс, когда сеанс время вышло. Он также вызывает события, подобные Session_End.

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

...

Как правило, в большинстве случаев вам необходимо используйте Session.Clear. Вы можете использовать Session.Abandon, если вы уверены, что пользователь собирается покинуть ваш сайт.

Итак, вернемся к различиям:

  • Abandon вызывает запрос Session_End.
  • Очистить немедленно удаляет элементы, Abandon не делает.
  • Abandon освобождает объект SessionState и его элементы, чтобы он мог мусор собраны.
  • Очистить сохраняет SessionState и связанные с ним ресурсы.

Session.Clear() или Session.Abandon()?

Вы используете Session.Clear(), когда вы не используете хочу закончить сессию, но просто очистить все ключи в сеансе и повторно инициализировать сеанс.

Session.Clear() не приведет к Session_End обработчик событий в вашем Файл Global.asax для выполнения.

Но, с другой стороны Session.Abandon() удалит сессии в целом и будет выполняться Обработчик событий Session_End.

Session.Clear() - это как удаление книг с книжной полки

Session.Abandon() похож на книжная полка.

Вопрос

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

Ответ

Если вы хотите, чтобы пользователь снова заходил в систему, используйте Session.Abandon.

Ответ 3

Другая большая разница заключается в том, что Abandon не удаляет элементы сразу, но когда он делает очистку, он выполняет цикл над элементами сеанса, чтобы проверить объекты COM STA, которые ему нужно обрабатывать специально. И это может быть проблемой.

При большой нагрузке для двух (или более) запросов можно сделать это на сервере для одного сеанса (т.е. два запроса с одним и тем же сеансовым файлом cookie). Их выполнение будет сериализовано, но поскольку Abandon не очищает элементы синхронно, а устанавливает флаг, который возможен для обоих запросов для запуска, и оба запроса для планирования рабочего элемента для очистки сеанса "позже". Оба эти рабочих элемента могут запускаться одновременно, и оба проверяют объекты сеанса, и оба очищают массив объектов, и что происходит, когда у вас есть две вещи, повторяющиеся по списку и изменяющие его? Boom! И так как это происходит в обратном вызове queueuserworkitem и НЕ выполняется в try/catch (спасибо MS), он снизит ваш весь домен приложения. Был там.