servicestack,Session,Model View Controller,Redis,servicestack" /> servicestack,Session,Model View Controller,Redis,servicestack" />

Session 会话数据未持久化

Session 会话数据未持久化,session,model-view-controller,redis,servicestack,Session,Model View Controller,Redis,servicestack,会话数据未在请求之间持久化。这似乎只有在MVC应用程序中使用“非默认”区域中的会话数据时才会发生 该应用程序正在使用Redis支持的会话状态服务器和服务堆栈身份验证实现 即使在身份验证(将用户重定向到站点的新区域)之后,在默认区域中添加的会话数据似乎仍然存在。另外,正在设置两个用户cookie,它们是ss:id和ss:pid 谢谢如果没有保存会话,我假设您没有保存会话。请参阅会话文档,了解如何操作。对于遇到相同问题的其他人,自定义redis会话状态提供程序的配置包含一个设置为false的“thr

会话数据未在请求之间持久化。这似乎只有在MVC应用程序中使用“非默认”区域中的会话数据时才会发生

该应用程序正在使用Redis支持的会话状态服务器和服务堆栈身份验证实现

即使在身份验证(将用户重定向到站点的新区域)之后,在默认区域中添加的会话数据似乎仍然存在。另外,正在设置两个用户cookie,它们是ss:id和ss:pid


谢谢

如果没有保存会话,我假设您没有保存会话。请参阅会话文档,了解如何操作。

对于遇到相同问题的其他人,自定义redis会话状态提供程序的配置包含一个设置为false的“throwOnError”属性。在代码库的前面一点上,发现一个不可序列化的类被添加到会话数据中,并导致此问题,但由于throwOnError=false,它没有突出显示。

您没有提供足够的信息,任何人都没有机会识别问题是什么或能够重现问题,例如,显示不起作用的代码、保存会话的位置、未保存会话的证明等。由于身份验证是远程的,服务堆栈身份验证可能有点误导。正如我提到的,这个项目使用一个定制的Redis会话状态提供程序。存储信息的代码很简单:HttpContext.Current.Session[“searchModel”]在操作结束之前,我可以看到密钥在会话中。然后,我在下一个操作中使用RedirectToAction和断点,检查会话数据表明密钥和项没有持久化。HttpContext.Current.Session是ASP.NET的会话,它与ServiceStack会话无关,ServiceStack会话是一个完全解耦的单独实现。是的,同意。我确实提到了它是一个Redis会话状态服务器,我只提到了与正在设置的cookie相关的服务堆栈身份验证。我不想暗示表单身份验证正在发生