所有,

我们有几个使用RedisSessionStateProvider进行会话存储的ASP.NET网站。我们刚刚开始启动ServiceStack的实例,我想将sessionId从ASP.NET传递到ServiceStack,然后在ServiceStack会话中使用Redis的存储值。

到目前为止,我已经能够在标头中传递sessionID,在我的插件中检索它,并从Redis获得与该sessionId匹配的值作为字符串。

我的问题是从ASP.NET进入Redis的类型化对象,但由于类型对象在ServiceStack中出现,所以我无法获得它。

任何和所有建议表示赞赏。

谢谢,

最佳答案

ServiceStack Sessions与ASP.NET会话及其会话提供程序模型完全分离/独立。由于它们是2种完全不同的技术,它们彼此不兼容,因此您将需要一个单独的“迁移步骤”以从ASP.NET会话状态中提取数据,并填充您的Typed Custom UserSessionsave it in ServiceStack

ServiceStack会话只是在persisted in the registered Caching Provider中标识的键处的您键入的UserSession Cookie SessionId

浏览缓存中的所有用户会话

Inspecting Persisted User Sessions通过以下键说明如何将用户会话序列化POCO存储在Registered ICacheClient中:

urn:iauthsession:{SessionId}


其中{SessionId}是用户ss-id还是ss-pid cookie,具体取决于用户是否通过RememberMe=true进行了身份验证,这指示ServiceStack将会话保存为ss-pid永久cookie-此首选项存储在 Cookie。

由于它们只是以可预测的密钥格式存储的普通POCO,因此我们可以直接使用ICacheClient API轻松地遍历所有用户会话,例如:

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

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

关于asp.net - 在Redis中存储ASP.NET session 并在ServiceStack中读取它,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35370283/

10-15 09:07