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


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

кажется предпочтительным вызвать Abandon () в большинстве случаев, например, выход пользователя из системы. Есть ли сценарии, где я бы использовал Clear() вместо этого? Есть ли большая разница в производительности?

5 108

5 ответов:

Session.Abandon() уничтожает сеанс и Session_OnEnd event срабатывает.

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

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

использовать Session.Clear(), Если вы хотите, чтобы пользователь оставался в тот же сеанс (если вы не хотите, чтобы пользователь, например, перезаписал) и сбросил все данные сеанса.

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

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

Я все еще не уверен, что реальный пример мира, где вы бы использовали Session.Abondon(),Session.Clear().

Я могу понять...если пользователь нажимает ссылку выхода из системы, и вы берете их на свою страницу "вы вышли из системы"....их сеанс браузера все еще продолжается, но вы хотите удалить информацию, хранящуюся в сеансе. Если вы отказались от сеанса, то новый сеанс будет создан сразу же для страницы" вы вышли из системы".

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

У меня была эта проблема, и я попробовал оба, но пришлось довольствоваться удалением дерьма, такого как "pageEditState", но не удаляя информацию о пользователе, чтобы мне не пришлось искать ее снова.

public static void RemoveEverythingButUserInfo()
{
    foreach (String o in HttpContext.Current.Session.Keys)
    {
        if (o != "UserInfoIDontWantToAskForAgain")
            keys.Add(o);
    }
}