2015-11-20 80 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

相關問題