Intereting Posts
Список файлов с определенным расширением с помощью сборки WinSCP .NET Копировать элемент пользовательского интерфейса с adorner отправить клик мыши Как расшифровать с помощью rsa из файла PEM Разница между интерфейсом, абстрактным classом, закрытым classом, статическим classом и частичным classом в C #? Как скомпилировать тестовый код, который является очень сложным за публичным интерфейсом Файлы App.config и .ini Как переопределить вывод необработанных исключений по умолчанию в Owin? C # Excel импортирует данные из CSV в Excel Надежная проверка, если строка base64 закодирована в .Net Можем ли мы добавить четыре протокола в ServicePointManager.SecurityProtocol? Linq to Entities Group By (OUTER APPLY) “oracle 11.2.0.3.0 не поддерживает применение” Как добавить файл в качестве ссылки в библиотеке .NET Core? На сайте asp.net как предотвратить множественные логины одного и того же идентификатора пользователя? Сравните два объекта и найдите различия

Как увеличить тайм-аут сеанса в ServiceStack

Поставщики аутентификации, репозитория и кэширования в 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}"