2013-08-16 23 views
4

我對ServiceStack相當陌生,我正在開發一個基於它的項目。在ServiceStack中更新不同用戶的會話

該項目有管理面板,管理員能夠重置用戶的密碼,更新信息等

會話保持使用提供ServiceStack的AzureCacheClient Azure的緩存服務。

我想要的是當管理員更新某些用戶的信息時,同樣的更新應該反映緩存的IAuthSession對象。我可以訪問ICacheClient(當然),但我怎麼知道每個用戶的會話保存在哪個密鑰下?

回答

3

我有一個場景,我需要做類似的事情。我的解決方案是通過CustomUserSession向與用戶相關的會話添加標識符。

然後,我使用REDIS客戶端並遍歷所有會話,直到找到一個帶有用戶標識符的地方,然後執行任何搶佔會話,執行任何更新並再次保存會話。

using (var redis = _appHost.TryResolve<IRedisClientsManager>().GetClient()) 
{ 
    var sessionkeys = redis.SearchKeys("urn:iauthsession:*"); 

    foreach (var key in sessionkeys) 
    { 
     var session = redis.Get<CustomUserSession>(key); 
     if (session != null) 
     { 
      if (session.StudentId == SessionToFindId) 
      { 
       //Perform updates to session 
       redis.Set(key, session); 
      } 
     } 
    }      
}