2015-11-20 38 views
1

当我们向基于AuthUserSession的自定义会话DTO添加新属性时,我们需要使用户活动会话无效并强制他们重新登录或迁移其会话(无论是大众化还是懒惰化)。如果不这样做,预期的属性将不会被填充,并且依赖这些属性的代码会增加更多的复杂性。如何将缓存的ServiceStack会话迁移到新的“版本”

我挖掘并寻找围绕缓存会话水合的任何事件,但没有看到任何容易的地方配合并确定会话是否应该刷新。

任何有关如何在流程中插入此类逻辑的建议,在某些会话对象被ServiceStack服务或Razor视图使用之前,它始终会发生?

回答

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); 

否则我只是增加了一个自定义的钩子能够过滤会话(in this commit),通过在APPHOST覆盖OnSessionFilter(),如:

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

此更改从v4.0.49开始,现在可以使用available from MyGet

+0

因此,每次将会话从缓存中取出以供使用时,OnSessionFilter都会执行? – JesseP

+0

@JesseP yes最新的v4.0.49会在每次从缓存中检索后执行AppHost.OnSessionFilter()。 – mythz

+0

完美,谢谢! – JesseP

相关问题