【问题标题】:Is profile data for current user retrieved just once当前用户的个人资料数据是否只检索一次
【发布时间】:2009-11-16 19:18:43
【问题描述】:


a) 当前用户第一次访问 Profile 对象时,Asp.Net 检索该用户的完整配置文件还是在调用时检索配置文件属性?


b) 在任何情况下,当前用户的配置文件数据是在每次调用时从 DB 中检索,还是仅检索一次,然后在当前请求期间保存?


感谢

【问题讨论】:

    标签: asp.net security profile


    【解决方案1】:

    您没有指定这是网站项目还是 Web 应用程序项目;配置文件有很大的不同,因为它们不是针对 Web 应用程序项目模板开箱即用的:

    http://codersbarn.com/post/2008/07/10/ASPNET-PayPal-Subscriptions-IPN.aspx

    http://leedumond.com/blog/asp-net-profiles-in-web-application-projects/

    您是否已经真正实施了它,或者您只是处于规划阶段?如果是后者,那么上面的链接应该提供一些有价值的信息。至于缓存问题,我会接受 Dave 的建议。

    【讨论】:

    • 1) 我不知道有什么不同 - 在那种情况下,我最初的问题是指网站项目 2) 我可以问一下为什么 Web 项目不实施开箱即用的配置文件吗?跨度>
    • 出于某种原因,Microsoft 从不认为适合提供它们。如果您遵循这些链接中的解决方案,则很容易实现。先让它们工作,然后再担心缓存问题,这很容易解决:-)
    【解决方案2】:

    如果您想保存数据库调用,您可以使用实用程序方法来缓存配置文件,或者您可以实现自己的自定义 MembershipProvider 来处理缓存。

    在这种情况下,实用程序方法可能是最简单的解决方案,除非您想要实现其他功能,这将通过实现自定义 MembershipProvider 来提供。

    您可以参考此链接了解更多详情: How can I access UserId in ASP.NET Membership without using Membership.GetUser()?

    这是一个执行缓存的实用方法示例。你可以传递一个slidingMinutesToExpire,让它在一段时间后从缓存中过期,以避免在你有很多用户的情况下消耗过多的服务器内存。

    public static void AddToCache(string key, Object value, int slidingMinutesToExpire)
    {
        if (slidingMinutesToExpire == 0)
        {
            HttpRuntime.Cache.Insert(key, value, null, System.Web.Caching.Cache.NoAbsoluteExpiration, System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.NotRemovable, null);
        }
        else
        {
            HttpRuntime.Cache.Insert(key, value, null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(slidingMinutesToExpire), System.Web.Caching.CacheItemPriority.NotRemovable, null);
        }
    }
    

    【讨论】:

    • 所以我收集到,每次调用时都会从数据库中检索当前用户的网站项目配置文件数据?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    • 2021-03-09
    • 1970-01-01
    相关资源
    最近更新 更多