在ServiceStack中更新不同用户的会话

时间:2013-08-16 16:09:50

标签: session authentication caching servicestack

我是ServiceStack的新手,我正在开发一个基于它的项目。

项目有管理员面板,管理员可以重置用户密码,更新信息等。

使用随ServiceStack提供的AzureCacheClient将会话保存在Azure缓存服务中。

我想要的是当管理员更新某些用户的信息时,相同的更新应该反映缓存的IAuthSession对象。我可以访问ICacheClient(当然),但我怎么知道每个用户的会话所在的密钥?

1 个答案:

答案 0 :(得分: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);
           }
        }
     }                    
}