Подтвердить что ты не робот

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

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

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

Я пробовал:

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

4b9b3361

Ответ 1

Метод 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

Ответ 2

Session.Abandon()

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

Ответ 3

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

Session.Clear();
Session.Abandon();
Response.Cookies["ASP.NET_SessionId"].Value = string.Empty;
Response.Cookies["ASP.NET_SessionId"].Expires = DateTime.Now.AddMonths(-10);

Ответ 4

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

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 может вести себя по-разному.

Ответ 5

Session.Abandon()

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

Ответ 6

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

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

Ответ 7

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

Session.Abandon()

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

Session.Clear()

Ответ 8

Session["YourItem"] = "";

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

Ответ 9

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

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

HttpContext.Current.Session.Abandon();