Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# asp.net自定义成员资格提供程序对GetUser()的多次调用会使应用程序运行缓慢_C#_Asp.net_Asp.net Membership_Telerik Open Access - Fatal编程技术网

C# asp.net自定义成员资格提供程序对GetUser()的多次调用会使应用程序运行缓慢

C# asp.net自定义成员资格提供程序对GetUser()的多次调用会使应用程序运行缓慢,c#,asp.net,asp.net-membership,telerik-open-access,C#,Asp.net,Asp.net Membership,Telerik Open Access,我正在开发一个门户系统,用于共享信息和文档等。每个用户都可以有多个配置文件。因此,每个配置文件可以具有不同的角色和权限。现在一切正常,但我有一个关于会员资格提供者和会员资格使用者的问题 我将使用一个自定义的MembershipProvider和MembershipUser与OpenAccess ORM结合使用 我非常依赖(CustomMembershipUser)Membership.GetUser()。例如,我构建了一个usermenu,用户可以在其中查看登录的用户以及可以选择的配置文件 要构

我正在开发一个门户系统,用于共享信息和文档等。每个用户都可以有多个配置文件。因此,每个配置文件可以具有不同的角色和权限。现在一切正常,但我有一个关于会员资格提供者和会员资格使用者的问题

我将使用一个自定义的MembershipProvider和MembershipUser与OpenAccess ORM结合使用

我非常依赖
(CustomMembershipUser)Membership.GetUser()
。例如,我构建了一个usermenu,用户可以在其中查看登录的用户以及可以选择的配置文件


要构建此菜单并收集当前配置文件的组、角色和权限,需要从代码中的不同位置大量调用
Membership.GetUser()
。我首先缓存了该用户,并基于ProviderUserKey返回了它,但有人告诉我这是不安全的。所以我删除了缓存,但速度快得多。有没有替代的最佳做法?

对于您的情况,没有100%的解决方案,要么缓存结果,要么每次都计算结果。折衷的办法是,如果缓存导致应用程序面临风险,则必须非常小心地配置缓存策略


另外,只有在必须立即应用更改的情况下,缓存才会在非常罕见的情况下导致风险。考虑使用一些先进的缓存策略,比如.< /p>会话是基于您的描述的适当解决方案。它足够安全。HttpContext.Items[“MembershipUser”]仅在一个http请求中保留用户信息,而会话保留信息直到会话过期


但是,缓存是按应用程序而不是按用户进行的

我正在考虑将Membership.GetUser()存储在HttpContext.Items[“MembershipUser”]中,这将减少对每个请求的调用。不确定这是否是一个安全的解决方案。谢谢你为我指明了方向。我将研究缓存依赖关系。我知道Context.Items的生存期。胜利将是对数据库的一次调用,而不是每次请求都多次调用。我也将主持会议。我将制作一些测试用例。谢谢啊,我记得为什么我从会话移动到缓存。在HttpModule执行期间,会话尚不可用。所以我回到缓存,并将跟随Johnny_D的缓存依赖性。我应该再读一遍我自己的文档。无论如何谢谢你!谢谢你的反馈。您提到由于安全原因删除了缓存。我看不出使用缓存依赖项如何提高安全性。您可能会对无法访问会话感到困惑。我很确定,当使用自定义成员资格提供程序时,会话是可用的。我理解您的困惑。