输出页面和会话页面状态
Output page and session page state
我想将 outputcache 添加到我的 ASP.NET 网站。但是,背后有一些代码会根据用户是否登录来更改某些按钮和内容。恐怕如果我使用它,它可能会缓存包含登录用户代码的页面。它是这样工作的,还是我是否必须配置一些东西才能与会话一起工作?
您需要进行以下更改:
添加 VaryByCustom
属性并在 OutputCache
指令中将其值设置为用户,如下所示:
<%@ 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);
}
根据您在下面对此回答的评论,您说您正在使用会话变量来检查用户是否登录。让我告诉你,这不是管理这样的身份验证的最佳实践。
任何根据会话值使缓存无效的解决方案都是这样做的:
<%@ 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);
}
这就是您需要做的全部。希望能帮助到你。
我想将 outputcache 添加到我的 ASP.NET 网站。但是,背后有一些代码会根据用户是否登录来更改某些按钮和内容。恐怕如果我使用它,它可能会缓存包含登录用户代码的页面。它是这样工作的,还是我是否必须配置一些东西才能与会话一起工作?
您需要进行以下更改:
添加 VaryByCustom
属性并在 OutputCache
指令中将其值设置为用户,如下所示:
<%@ 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);
}
根据您在下面对此回答的评论,您说您正在使用会话变量来检查用户是否登录。让我告诉你,这不是管理这样的身份验证的最佳实践。
任何根据会话值使缓存无效的解决方案都是这样做的:
<%@ 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);
}
这就是您需要做的全部。希望能帮助到你。