Как убить сеанс или идентификатор сеанса (ASP.NET/C#)

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

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

Я пробовал:

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

22
16 марта '11 в 21:51
источник поделиться
9 ответов

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

Session.Abandon();

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

Session.Remove("YourItem");

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

Session["YourItem"] = null;

Если вы хотите очистить все клавиши, выполните следующие действия:

Session.Clear();

Если ни одна из них не работает для вас, тогда происходит что-то подозрительное. Я бы посмотрел, где вы назначаете это значение, и убедитесь, что он не получает переназначение после удаления значения.

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

Session["YourKey"] = "Test";  // creates the key
Session.Remove("YourKey");    // removes the key
bool gone = (Session["YourKey"] == null);   // tests that the remove worked
51
16 марта '11 в 21:53
источник

Session.Abandon()

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

4
16 марта '11 в 21:53
источник

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

Session.Clear();
Session.Abandon();
Response.Cookies["ASP.NET_SessionId"].Value = string.Empty;
Response.Cookies["ASP.NET_SessionId"].Expires = DateTime.Now.AddMonths(-10);
3
12 окт. '16 в 11:32
источник

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

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 устанавливает только логический флаг в объекте session в true. Вызывающий веб-сервер может реагировать на это или нет, но существует немедленное действие НЕТ, вызванное ASP. (Я сам это проверил с .net-Reflector)

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

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

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

2
03 апр. '13 в 16:59
источник
Session.Abandon()

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

1
16 марта '11 в 22:02
источник

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

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

HttpContext.Current.Session.Abandon();
0
24 февр. '16 в 2:35
источник

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

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

0
16 марта '11 в 21:53
источник

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

Session.Abandon()

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

Session.Clear()
0
16 марта '11 в 21:54
источник
Session["YourItem"] = "";

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

0
01 февр. '15 в 12:23
источник

Посмотрите другие вопросы по меткам или Задайте вопрос