C# Очистить Сеанс
Вопрос № 1
Я хочу знать, когда я должен использовать:
сессии.Отказаться от() / / когда я использую это во время трассировки и после ее вызова - я нахожу, что сеанс все еще имеет значение.
и когда я должен использовать :
когда следует использовать каждый конкретный метод?
- In генерал?
- в моем конкретном случае?
Я проверяю, не равен ли сеанс null при загрузке страницы. Если сеанс равен null, я хочу очистить сеанс и перенаправить на страницу входа в систему?
должен ли я использовать что-то вроде этого:
private void initSession()
{
Session.Clear();
Session.Abandon();
Response.Redirect("LoginPage.aspx");
}
3 ответов
In ASP.NET, когда я должен использовать сеанс.Clear () вместо сеанса.Отказаться ()?
сессии.Abandon () уничтожает сеанс и событие Session_OnEnd вызванный.
сессии.Clear () просто удаляет все значения (содержимое) из объекта. Этот сеанс с тем же ключом по-прежнему живой.
Итак, если вы используете сеанс.Оставить вас потерять эту конкретную сессию и пользователь получит новый ключ сеанса. Вы мог использовать его, например, когда пользователь выходить из системы.
Использовать Сессии.Clear (), если вы этого хотите пользователь, оставшийся в том же сеансе (если вы не хотите, чтобы он снова для пример) и сбросить весь его сеанс конкретные данные.
в чем разница между сессии.Отказаться () и сеанс.Clear ()
Clear-удаляет все ключи и значения из коллекции состояния сеанса.
Abandon-удаляет все объект хранится в сеансе. Если нет явным образом вызовите метод Abandon, сервер удаляет эти объекты и уничтожает сеанс, когда сеанс тайм-аут. Он также поднимает события, такие как конец сессии.
сессии.Понятно, можно сравнить с сняв все книги с полки, во время сеанса.Отказ больше похож на выбросил всю полку.
...
вообще, в большинстве случаев вам нужно используйте сеанс.Четкий. Вы можете использовать Сессия.Отказаться, если вы уверены, что пользователь собирается покинуть сайт.
Итак, вернемся к различиям:
- Abandon вызывает запрос Session_End.
- очистить удаляет элементы немедленно, отказаться не делает.
- Abandon освобождает объект SessionState и его элементы, чтобы он мог отбрасывать мусор собранный.
- Clear сохраняет SessionState и связанные с ним ресурсы.
сессии.Очистить () или сеанс.Отказаться ()?
вы используете сессии.Clear (), когда вы не хотите закончить сеанс, но скорее просто очистите все ключи в сеансе и инициализации сессии.
сессии.Clear() не вызовет Session_End eventhandler в вашем Глобальный.asax файл для выполнения.
но с другой стороны Сессия.Abandon () удалит сессия вообще и будет выполнять EventHandler в Session_End.
сессии.Clear () - это как удаление книг с книжной полки!--3-->
сессии.Abandon () - это как бросать сама Книжная полка.
вопрос
Я проверяю некоторые сеансы, если они не равны нулю в загрузке страницы. если один из них равен null, я хочу очистить все сеансы и перенаправить на страницу входа в систему?
ответ
Если вы хотите пользователь для входа в систему снова используйте Session.Оставлять.
другая большая разница заключается в том, что Abandon не удаляет элементы сразу, но когда это происходит, очистка делает цикл над элементами сеанса, чтобы проверить объекты STA COM, которые он должен обрабатывать специально. и это может быть проблемой.
при высокой нагрузке можно сделать два (или более) запроса на сервер для одного сеанса (то есть два запроса с одним и тем же cookie сеанса). Их исполнение будет сериализовано, но поскольку Abandon не очищает элементы синхронно, но скорее устанавливает флаг можно для обоих запросов для запуска, и оба запроса запланировать рабочий элемент, чтобы очистить сеанс "позже". Оба этих рабочих элемента могут выполняться одновременно, и оба проверяют объекты сеанса, и оба очищают массив объектов, и что происходит, когда у вас есть две вещи, повторяющие список и изменяющие его?? Бум! И поскольку это происходит в обратном вызове queueuserworkitem и не выполняется в try / catch( спасибо MS), это будет сбросьте весь домен приложения. Был там.