10

ServiceStack の認証、リポジトリ、およびキャッシング プロバイダーは、コードをほとんど追加せずにログイン セッションを Web アプリケーションに追加する簡単な方法を提供します。認証プロバイダーのセッション タイムアウトを構成できることがわかりました。次に例を示します。

new CredentialsAuthProvider { SessionExpiry = TimeSpan.FromMinutes(10) }

これにより、ログイン時点からの有効期限が提供されます。短時間でユーザーをログアウトする必要がある安全なシステムを開発している場合は、これをデフォルトの 2 週間から上記の例のようなものに変更します。ただし、これには、ユーザーがまだアプリケーションと対話しているかどうかに関係なく、ユーザーがログインしてから 10 分間が追い出されるという問題があります。

サービスが呼び出されたときに有効期限を延長するようにセッション プロバイダーに指示する簡単な方法はありますか?

理想的には、特定のサービス/リクエストのセッションを拡張できるようにすることです (ユーザーがアプリケーションと積極的に対話する場合にのみセッションが拡張されるため、ポーリングされたサービスは無視できます)。

アップデート

神話によって与えられた答えに基づいて、 ResponseFilterAttribute を拡張することによって必要なレベルの制御を提供する単純なソリューションが得られました。

4

1 に答える 1

10

ServiceStackは、まだ「スライド セッション有効期限」を自動的にサポートしていません。基本的に、リクエストが成功するたびにセッション キャッシュ エントリをリセットする必要があります。つまり、有効期限までに有効期間を延長する効果を持つセッションを再保存する応答フィルターを (認証された要求に対してのみ実行されるため) 持つことができます。

var userSession = httpReq.GetSession();
httpReq.SaveSession(userSession, slidingExpiryTimeSpan);

Redis など、使用しているキャッシング プロバイダーがわかっている場合は、エントリを再読み込みせずに有効期限タイムアウトを手動で更新できます。

var sessionKey = SessionFeature.GetSessionKey(httpReq.GetSessionId());
redis.ExpireEntryIn(sessionKey, slidingExpiry); //"urn:iauthsession:{sessionId}"
于 2013-02-13T17:47:49.440 に答える