Подтвердить что ты не робот

Оптимизация MVC для Session.Clear(), Session.Abandon(), Session.RemoveAll()?

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

4b9b3361

Ответ 1

Session.Clear и Session.RemoveAll идентичны; последний просто называет первый. Они немедленно удаляют все элементы, хранящиеся в сеансе, но сам сеанс сохраняется. Session_OnEnd не срабатывает.

Session.Abandon фактически не очищает значения немедленно, он просто отмечает, что сеанс будет оставлен в конце текущего запроса. Вы можете продолжить чтение значений для остальной части запроса. Если вы напишете на сеанс позже в запросе, новое значение будет спокойно отброшено в конце запроса без предупреждения. Session_OnEnd запускается в конце запроса, а не когда вызывается Abandon.

Ответ 3

Немного поздно, но хотелось бы поделиться доказательством того, что @stevemegson верен как Session.RemoveAll внутренне вызывает Session.Clear

public void Clear()
        {
            this._container.Clear();
        }
        public void RemoveAll()
        {
            this.Clear();
        }

И поэтому нет никакой разницы между всеми

И session.Abandon вызывает

public void Abandon()
        {
            this._container.Abandon();
        }

которые в основном делают:)..

public void Abandon()
{
    this._abandon = true;
}