Каков срок действия сессии по умолчанию в .NET Core 2.x? - PullRequest
6 голосов
/ 01 мая 2019

В моем классе запуска я включаю хранилище сеансов с этой строкой:

        services.AddDistributedMemoryCache()
        .AddSession(options =>
            {
                options.IdleTimeout = TimeSpan.FromMinutes(20);
                options.Cookie.HttpOnly = true;
            })

Однако, если я правильно понимаю, установка свойства IdleTimeout просто означает, что сеанс начнется заново, если пользователь не выполнит никаких действий в течение> 20 минут. В моем приложении есть опрос, который использует информацию о пользователе в хранилище сеансов каждые 5-10 секунд, поэтому я не думаю, что это когда-нибудь пригодится. Полномочия и роли пользователя могут отличаться от действий, выполняемых вне браузера текущего пользователя, поэтому я хотел бы ограничить хранение сеанса до 1 минуты. Я не могу найти какое-либо точное слово о том, что истечение по умолчанию или как правильно установить это.

Класс CookieBuilder имеет опции Expiration и MaxAge, но я не знаю, какой из них необходим. Я также читал, что Истечение срока действия игнорируется , так что это еще больше увеличивает путаницу в этой теме.

Обновление: я получаю это сообщение, когда пытаюсь установить срок действия: «Не удается установить срок действия для файла cookie, определенного SessionOption», поэтому я установил MaxAge на 1 минуту, но я вижу, что сеанс все еще имеет старый пользовательские данные в нем по прошествии более 1 минуты.

1 Ответ

2 голосов
/ 08 мая 2019

Сессия не имеет «истечения», как куки, но по умолчанию Idle Timeout составляет 20 минут, и ее можно настроить с помощью опции IdleTimeout.

Сессия истекает только после того, каквремя простоя истекло.Кроме того, время ожидания простоя начинается после получения последнего запроса.

В вашем случае сеанс будет , а не , истекает, поскольку вы опрашиваете каждые 5-10 секунд (проверка данных сеанса).Этот опрос рассматривается как «запрос» к ядру .net и сбрасывает время ожидания.

Вы можете проверить это, отключив опрос и создав страницу с кнопкой, которая проверяет данные сеанса.Подождите некоторое время (например, 20 секунд) и нажмите кнопку.

Убедитесь, что для тайм-аута установлено низкое значение:

options.IdleTimeout = TimeSpan.FromSeconds(10);

Вот ссылкак документации по сеансу .

...