我是ServiceStack的新手,我正在开发一个基于它的项目。
项目有管理员面板,管理员可以重置用户密码,更新信息等。
使用随ServiceStack提供的AzureCacheClient将会话保存在Azure缓存服务中。
我想要的是当管理员更新某些用户的信息时,相同的更新应该反映缓存的IAuthSession对象。我可以访问ICacheClient(当然),但我怎么知道每个用户的会话所在的密钥?
答案 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);
}
}
}
}