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

StackOverflow https://stackoverflow.com/questions/347377

Вопрос

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

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

Это было полезно?

Решение

Session.Abandon() разрушает сеанс , и запускается событие Session_OnEnd .

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

Итак, если вы используете <=>, вы потеряете этот конкретный сеанс, и пользователь получит новый ключ сеанса. Вы можете использовать его, например, когда пользователь выходит из системы.

Используйте <=>, если вы хотите, чтобы пользователь оставался в том же сеансе (например, если вы не хотите, чтобы пользователь повторно входил в систему), и сбросьте все специфичные для сеанса данные.

Другие советы

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

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

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

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

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

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

public static void RemoveEverythingButUserInfo()
{
    foreach (String o in HttpContext.Current.Session.Keys)
    {
        if (o != "UserInfoIDontWantToAskForAgain")
            keys.Add(o);
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top