2013-02-13 9 views
10

ServiceStackの認証、リポジトリ、およびキャッシングプロバイダは、ほとんどコードを追加せずにWebアプリケーションに簡単にログインセッションを追加できます。私は、認証プロバイダのセッションタイムアウトを設定できることを発見しました。たとえば、ServiceStackでセッションタイムアウトを進める方法

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

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

具体的には、特定のサービス/要求のセッションを拡張することができます(ユーザーがアクティブにアプリケーションと対話し、ポーリングされたサービスを無視できる場合にのみセッションが拡張されるようにする)。私たちは今、私たちはextending the ResponseFilterAttributeによって必要と制御のレベルを提供する単純な解決策を持っているmythzによって与えられた回答に基づいて

更新

+2

これはあなたの質問に対する回答ではありませんが、「スライドする」という用語です。スライディングキャッシュ、スライディングセッションタイムアウトなど。 – Matthew

答えて

10

ServiceStackは「スライドセッションの有効期限」を自動的にはサポートしていません。基本的には、成功したリクエストごとにセッションキャッシュエントリをリセットする必要があります。

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

あなたが知っている場合:(彼らは唯一の認証済みの要求のために実行しているので)つまり、あなたはそれはそれは有効期限によって寿命があります延長する効果がありますセッションを再保存し、応答フィルタを持つことができますどのキャッシングプロバイダを使用しているか、たとえばRedisでは、エントリを再度読み取らずに有効期限を手動で更新することができます。例:

var sessionKey = SessionFeature.GetSessionKey(httpReq.GetSessionId()); 
redis.ExpireEntryIn(sessionKey, slidingExpiry); //"urn:iauthsession:{sessionId}" 
+0

ありがとうございます。おそらくSSの将来の機能は、サービス要求機能に追加できる属性であり、これにより、有効期限をスライドさせるよう明示的に指示するため、デフォルトの動作は無効になります。 – Dan

+0

ええ、私は 'EnableSlidingExpiration'オプションがうまくいくと思います。 – mythz

+2

他の人にも役立つことを願って、[ここに解決策があります](http://teadriven.me.uk/2013/02/14/sliding-sessions-in-service-stack)私はmythz提案。 – Dan

関連する問題