我有一个母版页面,它有一个相当简单的菜单系统。可用的菜单项基于登录用户。但是,数据库调用确定此逻辑超过一秒钟,这可能对我来说太长了。
有没有办法将菜单包装到UserControl中,但是还有一段时间需要刷新,但显然输出缓存也应该基于每个用户?
我知道另一种解决方案是为每个用户缓存数据,然后重建,但我认为更有效的起点是页面输出缓存。
请注意,此应用程序也不会使用会话状态。
答案 0 :(得分:2)
您可以查看页面输出缓存的VaryByParam
方法。
当您的用户登录时,向您的网页添加查询字符串,例如page.aspx?uid=x123
然后将以下内容添加到您的页面中:
<%@ OutputCache Duration="10800" VaryByParam="uid" %>
这将使每个用户缓存。
请记住:
即使您将您的用户作为查询字符串,仍然进行验证,即它是登录的同一用户,以避免用户通过简单地更改查询字符串来窥视彼此的视图。