输出页面和会话页面状态
本文关键字:状态 会话 输出 | 更新日期: 2023-09-27 17:58:20
我想将outputcache添加到我的ASP.NET网站。但是,有一些代码会根据用户是否登录来更改一些按钮和内容。我担心如果我使用它,它可能会缓存带有登录用户代码的页面。这是它的工作方式吗?或者我是否必须配置一些东西,以便它能与会话一起工作?
您需要进行以下更改:
在OutputCache
指令中添加VaryByCustom
属性并将其值设置为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);
}
这就是你所需要做的。希望能有所帮助。