您可以按个人用户设置页面输出缓存吗?

Can you set Page Output Cache by an Individual user?

我有一个母版页,它有一个相当简单的菜单系统。可用的菜单项基于登录用户。但是,确定此逻辑的数据库调用超过一秒钟,这对我来说可能太长了。

有没有办法将 Menu 包装到 UserControl 中,同时具有刷新持续时间,但显然输出缓存也应该基于每个用户?

我知道另一种解决方案是为每个用户缓存数据然后重建,但我认为更有效的起点是页面输出缓存。

另请注意,此应用程序没有用户会话状态。

你可以看看页面输出缓存的VaryByParam方法。

当您的用户登录时,向您的页面添加查询字符串,例如 page.aspx?uid=x123

然后将以下内容添加到您的页面:

<%@ OutputCache Duration="10800" VaryByParam="uid" %>

这将使每个用户缓存。

请记住:
即使你把你的用户作为一个查询字符串,仍然要进行验证,它是登录的同一用户,以避免用户通过简单地更改查询字符串来偷看彼此的视图。