Authentication MVC4:在整个会话中保持静态数据

Authentication MVC4:在整个会话中保持静态数据,authentication,web,asp.net-mvc-4,castle-windsor,ioc-container,Authentication,Web,Asp.net Mvc 4,Castle Windsor,Ioc Container,在用户登录到我的ASP.NETMVC4网站后,我需要保留一些关于用户的静态数据。所有东西都装在温莎城堡的集装箱里 登录过程调用身份验证服务,该服务返回用户数据,该数据是稍后在会话中处理和其他ServiceCall所需的 我已经看过这个帖子:。但问题是它在静态类中使用servicelocation,这是有问题的 在这样的设置中,我应该如何存储用户数据以便在整个会话中使用 编辑: 我正在使用持久Cookie,因此当用户返回站点时,我需要以某种方式重新创建我的用户数据。在您的登录方法中,一旦您授权了用

在用户登录到我的ASP.NETMVC4网站后,我需要保留一些关于用户的静态数据。所有东西都装在温莎城堡的集装箱里

登录过程调用身份验证服务,该服务返回用户数据,该数据是稍后在会话中处理和其他ServiceCall所需的

我已经看过这个帖子:。但问题是它在静态类中使用servicelocation,这是有问题的

在这样的设置中,我应该如何存储用户数据以便在整个会话中使用

编辑:
我正在使用持久Cookie,因此当用户返回站点时,我需要以某种方式重新创建我的用户数据。

在您的登录方法中,一旦您授权了用户并从数据库检索到用户详细信息,您就可以将其存储在会话中:

UserDetail details = ...
Session["user_details"] = details;
以后需要时:

UserDetail details = Session["user_details"] as UserDetail;
作为替代,您可以编写一个自定义成员身份提供程序,它将从会话中读取此信息(如果存在),如果没有,它将查询数据库以检索它


另一种可能是通过覆盖AuthorizeCore方法来拥有自定义Authorize属性,在该方法中,您可以设置包含用户详细信息的自定义主体,并从会话中读取。

感谢您的回答。在一个简单的场景中,您的解决方案运行良好,但对我的解决方案不起作用(请参见上面的编辑)。我不认为在持久性cookie中存储此信息这么长时间是一种好方法。你当然可以这样做。您可以使用表单身份验证cookie的数据部分来序列化您喜欢的用户的任何详细信息。但是IMHO将其存储在会话中,并在会话中数据不可用时查询数据库也是一种很好的方法。我不想将信息存储在cookie中。我希望在整个会话中保留数据。如果用户带着持久cookie返回站点,我需要将日期加载回会话状态。问题是我用来获取数据的服务注册在IoC容器(Castle Windsor)中。我链接的方法使用了服务定位器来获取此服务,但我不喜欢服务位置。如果有人尝试在不同浏览器中查看同一页面,会发生什么情况,此会话[“用户详细信息”]将被替换为新的详细信息?