Я использую несколько сеансов, которые должны быть завершены, когда пользователь будет выполнен. Я наткнулся на этих трех сессионных убийц. Когда самое лучшее время для их использования, поскольку я использую сеансы больше времени, чем нет. Кроме того, есть ли какое-либо другое завершение сеанса, о котором я не знаю?
Оптимизация MVC для Session.Clear(), Session.Abandon(), Session.RemoveAll()?
Ответ 1
Session.Clear
и Session.RemoveAll
идентичны; последний просто называет первый. Они немедленно удаляют все элементы, хранящиеся в сеансе, но сам сеанс сохраняется. Session_OnEnd не срабатывает.
Session.Abandon
фактически не очищает значения немедленно, он просто отмечает, что сеанс будет оставлен в конце текущего запроса. Вы можете продолжить чтение значений для остальной части запроса. Если вы напишете на сеанс позже в запросе, новое значение будет спокойно отброшено в конце запроса без предупреждения. Session_OnEnd запускается в конце запроса, а не когда вызывается Abandon.
Ответ 2
Session.Clear
не убивает сеанс, он очищает все значения. Session.Abandon
фактически убивает сеанс.
Похоже, что большая часть этого вопроса рассматривается здесь: В ASP.NET, когда я должен использовать Session.Clear(), а не Session.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;
}