Сбрасывается ли тайм-аут сеанса ASP.Net Inproc при обращении к SessionID?
-
05-07-2019 - |
Вопрос
Я прочитал здесь , что сеанс inproc asp.net сбрасывается это время ожидания каждый раз, когда к нему обращаются (чтение или запись). У меня вопрос, если тайм-аут также сбрасывается, если я только читаю sessionID?
Пример: время ожидания сеанса установлено на 20 минут. Через 15 мин. бездействия я загружаю страницу и читаю Session.SessionID. Будет ли сеанс существовать еще через 10 минут?
И еще один вопрос: имеет ли значение, если страница загружается напрямую или доступ осуществляется через AJAX?
Решение
Мне кажется, что вы смешиваете две разные вещи: чтение значения из состояния сеанса (в коде) отличается от присоединения экземпляра SessionState к текущему запросу.
Если я не очень ошибаюсь, тайм-аут не обновляется каждый раз, когда вы обращаетесь к объекту Session (опять же, в коде), скорее он обновляется при обслуживании нового запроса. Это происходит потому, что элемент SessionState сам добавляется в кэш (и устанавливается политика истечения срока действия)
Итак, чтобы ответить на ваш вопрос: время ожидания не будет сброшено.
Чтобы пояснить приведенный вами пример: время ожидания будет сброшено при загрузке страницы, а не при чтении SessionID в коде.
Другие советы
Доступ к SessionID не влияет на время ожидания сеанса. Если вы посмотрите на Reflector, свойство SessionID (реализовано в HttpSessionStateContainer) будет выглядеть следующим образом:
public string SessionID
{
get
{
if (this._id == null)
{
this._id = this._stateModule.DelayedGetSessionId();
}
return this._id;
}
}
Который не касается лежащих в основе хранимых элементов.
Кроме того, на этом уровне не имеет значения, откуда поступил запрос (ajax / normal).