Поставщики аутентификации, репозитория и кэширования в ServiceStack обеспечивают простой способ добавления сеансов входа в веб-приложение с почти отсутствием дополнительного кода. Я обнаружил, что тайм-аут сеанса для поставщика проверки подлинности можно настроить, например:
new CredentialsAuthProvider { SessionExpiry = TimeSpan.FromMinutes(10) }
Это дает срок с момента входа. Если мы разрабатываем защищенную систему, которая должна вывести пользователя из системы через короткое время, мы изменим это значение по умолчанию на две недели на что-то вроде приведенного выше примера. Но в этом проблема состоит в том, что 10 минут после входа в систему пользователя будут выведены из системы независимо от того, взаимодействуют ли они с приложением.
Есть ли простой способ сказать провайдеру сеанса продлить время истечения срока действия при вызове служб?
В идеале это позволило бы нам продлить сеанс для конкретных сервисов / запросов (так что сеанс будет расширен только тогда, когда пользователь активно взаимодействует с приложением, и поэтому опрошенные службы могут быть проигнорированы).
Обновить
Основываясь на ответе, данном mythz, теперь у нас есть простое решение, которое обеспечивает необходимый уровень контроля, расширяя ResponseFilterAttribute .
ServiceStack автоматически не поддерживает «скользящее время сеанса». Вам в основном необходимо сбросить запись кэша сеанса при каждом успешном запросе. т.е. у вас может быть фильтр ответов (поскольку они выполняются только для аутентифицированных запросов), которые сохраняют сеанс, который будет продлевать срок его жизни по истечении срока действия:
var userSession = httpReq.GetSession(); httpReq.SaveSession(userSession, slidingExpiryTimeSpan);
Если вы знаете, какой поставщик кеширования вы используете, например Redis, вы можете вручную обновить тайм-аут истечения срока действия без повторного чтения записи, например:
var sessionKey = SessionFeature.GetSessionKey(httpReq.GetSessionId()); redis.ExpireEntryIn(sessionKey, slidingExpiry); //"urn:iauthsession:{sessionId}"