Сбрасывается ли тайм-аут сеанса ASP.Net Inproc при обращении к SessionID?

StackOverflow https://stackoverflow.com/questions/625782

  •  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).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top