所有,
我们有几个使用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 UserSession和save 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/