在 Redis 中存储一个 ASP.NET Session 并在 ServiceStack 中读取它

Storing an ASP.NET Session in Redis and reading it in ServiceStack

全部,

我们有几个 ASP.NET 网站正在使用 RedisSessionStateProvider 进行 session 存储。我们刚刚开始启动 ServiceStack 的一个实例,我想将 sessionId 从 ASP.NET 传递到 ServiceStack,然后在 ServiceStack [=34] 中使用来自 Redis 的存储值=]秒。

到目前为止,我已经能够在 header 中传递 sessionID,在我的插件中检索它,并从 [=31] 中获取匹配 sessionId 的值=] 作为字符串返回。

我的问题是类型 object 从 ASP.NET 进入 Redis,但我无法得到它,因为类型 object 出现在 ServiceStack 中。

感谢任何和所有建议。

谢谢, B

ServiceStack Sessions are completely decoupled/independent from ASP.NET Sessions and its Session Provider model. As they're 2 completely different technologies they're incompatible with each other, you'll need a separate "migration step" to extract out data from ASP.NET Session State, populate your Typed Custom UserSession and save it in ServiceStack.

ServiceStack Session 就是您的 Typed UserSession persisted in the registered Caching Provider at a key identified from the Cookie SessionId

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

Inspecting Persisted User Sessions 说明了用户会话是如何序列化的 POCO 存储在已注册 ICacheClient 中的以下键中:

urn:iauthsession:{SessionId}

其中 {SessionId} 是用户 ss-idss-pid cookie,具体取决于用户是否使用 RememberMe=true 进行了身份验证,它指示 ServiceStack 针对 ss-pid 永久 cookie - 此首选项存储在 ss-opt=perm cookie 中。

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

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

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