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

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

Ответы

Ответ 1

Session.Abandon() завершит текущий сеанс. Session_End будет запущен, и следующий запрос активирует событие Session_Start.

Session.Clear просто очистит данные сеанса, и сеанс останется в живых.

Идентификатор сеанса останется неизменным в обоих случаях, если браузер не закрыт.

В двух словах:

Session.Abandon(); отменяет текущий Session.

Session.Clear(); очищает все значения из состояния Session.

Ответ 2

Session.Abandon() 

уничтожит/уничтожит весь сеанс.

Session.Clear()

удаляет/очищает данные сеанса (т.е. ключи и значения из текущего сеанса), но сеанс будет активным.

Сравнение с методом Session.Abandon(), Session.Clear() не создает новый сеанс, он просто превращает все переменные в сеансе в NULL.

Идентификатор сеанса останется таким же в обоих случаях, если браузер не закрыт.

Ответ 3

Некоторые вещи, которые следует отметить здесь из моего опыта:

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

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

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

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