如何将缓存的ServiceStack会话迁移到新的"版本"

时间:2015-11-20 21:48:06

标签: session caching servicestack

当我们向基于AuthUserSession的自定义会话DTO添加新属性时,我们要么使用户活动会话无效并强制他们重新登录,要么迁移他们的会话(以大量或懒惰的方式)。如果不这样做,预期的属性将不会被填充,并且依赖于这些属性的代码会增加更多的复杂性。

我在周围挖掘并查找有关缓存中会话水合的任何事件,但没有看到任何容易处理的位置并确定是否应该刷新会话。

有关在ServiceStack服务或Razor视图使用某个会话对象之前总是会在流程中插入此类逻辑的任何建议吗?

1 个答案:

答案 0 :(得分:2)

对于Caching providers that implement ICacheClientExtended,您可以访问所有会话:

var sessionPattern = IdUtils.CreateUrn<IAuthSession>(""); //= urn:iauthsession:
var sessionKeys = Cache.GetKeysStartingWith(sessionPattern).ToList();

var allSessions = Cache.GetAll<IAuthSession>(sessionKeys);

否则我刚刚添加了一个自定义钩子,可以通过覆盖AppHost中的OnSessionFilter()来过滤会话(in this commit),例如:

public override IAuthSession OnSessionFilter(IAuthSession session, string id)
{
    return base.OnSessionFilter(session, id);
}

此更改可从v4.0.49获得,现在为available from MyGet