Оптимизация MVC для Session.Clear (), Session.Abandon (), Session.RemoveAll ()? - PullRequest
27 голосов
/ 23 августа 2010

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

Ответы [ 3 ]

55 голосов
/ 24 августа 2010

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

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

13 голосов
/ 23 августа 2010

Session.Clear не уничтожает сеанс, он очищает все значения.Session.Abandon фактически убивает сессию.

Похоже, что большая часть этого адресована здесь: В ASP.NET, когда мне следует использовать Session.Clear () вместо Session.Abandon ()?

1 голос
/ 25 февраля 2014

Немного поздно здесь, но хотел бы поделиться доказательством того, что @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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...