我想将outputcache添加到我的ASP.NET网站。但是,有一些代码可以根据用户是否登录来更改某些按钮和内容。我担心如果我使用它,它可能会使用登录用户的代码缓存页面。它是如何工作的,或者我是否必须配置一些东西以便它可以用于会话?
答案 0 :(得分:1)
您需要进行以下更改:
添加VaryByCustom
属性,并在OutputCache
指令中将其值设置为User,如下所示:
<%@ OutputCache VaryByCustom="User" .... %>
然后在 Global.asax 文件中,您需要覆盖GetVaryByCustomString
方法,如下所示:
public override string GetVaryByCustomString(HttpContext context, string custom)
{
if (custom.Equals("User", StringComparison.InvariantCultureIgnoreCase))
{
// Return the user name/login as a value that will invalidate cache per authenticated user.
return context.User.Identity.Name;
}
return base.GetVaryByCustomString(context, custom);
}
根据您对此anwser的以下评论,您说您正在使用Session变量来检查用户是否已登录。我告诉你,这不是管理身份验证的最佳做法。
根据会话值使缓存无效的解决方案是这样做的:
<%@ OutputCache VaryByCustom="Session" .... %>
再次VaryByCustom
可以是您想要的任何string
值,赋予它意义string
非常好,让未来的开发者或您知道自己在做什么。
然后覆盖
public override string GetVaryByCustomString(HttpContext context, string custom)
{
if (custom.Equals("Session", StringComparison.InvariantCultureIgnoreCase))
{
// make sure that the session value is convertible to string
return (string)context.Session["Here you put your session Id"];
}
return base.GetVaryByCustomString(context, custom);
}
这就是你需要做的一切。希望能帮助到你。