Как убить сеанс или идентификатор сеанса (ASP.NET/C#) - PullRequest
29 голосов
/ 16 марта 2011

Как я могу уничтожить сеанс (Session ["Name"]), когда пользователь нажимает кнопку выхода из системы?

Я просматриваю Справочник по ASP.NET API в MSDN, и он не отображаетсяиметь много информации.Это кажется довольно ограниченным.Но я не могу найти другие страницы для классов ASP.NET и т. Д.

Я пробовал:

Session.Abandon(); и Session.Contents.Remove("Name");, ни одна из них не работает.(Я нашел их на форуме из поиска Google)

Ответы [ 9 ]

59 голосов
/ 16 марта 2011

Должен работать метод Abandon ( MSDN ):

Session.Abandon();

Если вы хотите удалить определенный элемент из сеанса ( MSDN ):

Session.Remove("YourItem");

РЕДАКТИРОВАТЬ: Если вы просто хотите очистить значение, вы можете сделать:

Session["YourItem"] = null;

Если вы хотите очистить все ключи, сделайте:* Если ни один из них не работает для вас, то происходит что-то подозрительное.Я бы проверил, где вы присваиваете значение, и убедитесь, что оно не переназначается после сброса значения.

Простая проверка:

Session["YourKey"] = "Test";  // creates the key
Session.Remove("YourKey");    // removes the key
bool gone = (Session["YourKey"] == null);   // tests that the remove worked
8 голосов
/ 12 октября 2016

Также рекомендуется поручить браузеру клиента очистить значение cookie идентификатора сеанса.

Session.Clear();
Session.Abandon();
Response.Cookies["ASP.NET_SessionId"].Value = string.Empty;
Response.Cookies["ASP.NET_SessionId"].Expires = DateTime.Now.AddMonths(-10);
5 голосов
/ 16 марта 2011

Session.Abandon ()

Это помечает сеанс как «Прерванный», но в данный момент сеанс фактически не будет прерван, запрос должен быть выполнен первым.

3 голосов
/ 03 апреля 2013

Из того, что я тестировал:

Session.Abandon(); // Does nothing
Session.Clear();   // Removes the data contained in the session

Example:
001: Session["test"] = "test";
002: Session.Abandon();
003: Print(Session["test"]); // Outputs: "test"

Session.Abandon только устанавливает логический флаг в объекте сеанса в значение true.Вызывающий веб-сервер может реагировать на это или нет, но есть немедленное действие NO , вызванное ASP.(Я сам проверил это с помощью .net-Reflector)

Фактически, вы можете продолжить работу со старым сеансом, нажав один раз кнопку браузера в браузере, и продолжить просмотр веб-сайта в обычном режиме.

Итак, чтобы сделать вывод: используйте Session.Clear () и сохраните разочарование.

Примечание: я проверял это поведение на сервере разработки ASP.net.Фактический IIS может вести себя по-другому.

1 голос
/ 24 февраля 2016

Session.Abandon(); у меня тоже не сработало.

То, как я должен был написать это, чтобы заставить его работать, было таким. Может работать и для вас.

HttpContext.Current.Session.Abandon();
1 голос
/ 01 февраля 2015
Session["YourItem"] = "";

Отлично работает на веб-страницах .net Razor.

1 голос
/ 16 марта 2011
Session.Abandon()

- это то, что вы должны использовать.Дело за кадром: asp.net уничтожит сеанс, но сразу же выдаст пользователю новый сеанс при запросе следующей страницы.Поэтому, если вы проверяете, прошел ли сеанс сразу после вызова отмены, это будет выглядеть так, как будто он не работает.

1 голос
/ 16 марта 2011

Вы уничтожаете сеанс следующим образом:

Session.Abandon()

Если, однако, вы просто хотите очистить сеанс, используйте:

Session.Clear()
1 голос
/ 16 марта 2011

Session.Abandon() это уничтожит данные.

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

...