是否可以根据 session 中的某些值改变 MVC 中的输出缓存?我已经阅读了很多关于使用 varybycustom 功能和重写 Global.asax 中的 GetVaryByCustomString 的内容,但此时 session 不可用。
public override string GetVaryByCustomString(HttpContext context, string custom)
{
if (custom == "somekey")
//Want to check the session here (but it isn't available).
return base.GetVaryByCustomString(context, custom);
}
我理解这是因为 session 直到稍后在请求管道中才创建。
我担心的是,如果不根据用户的 session 改变缓存,页面(根据用户在 session 中的内容而变化,具有特定于该用户的其他 HTML 等)将被缓存(因为 URL 是相同)并由我们的负载均衡器、代理服务器等提供服务,然后使用页面上其他人的 session 信息服务于其他请求!
URL 相同的原因是用户作为“访客”进来,输入一些信息 (POST),这些信息经过验证并存储在 session 中,然后他们被重定向回同一页面 (现在应该根据 session 数据特定于用户)。
页面本身应该被正常缓存,因为如果“访客”访问相同的 URL,它应该每次都提供相同的“标准”页面。
是否可以通过这种方式改变缓存?
最佳答案
如果您想个性化每个用户的缓存输出,最好将位置设置为 OutputCacheLocation.Client
,如下所示。更多信息 here
[OutputCache(Duration=3600, VaryByParam="none", Location=OutputCacheLocation.Client, NoStore=true)]
public string GetName()
{
return "Hi " + User.Identity.Name;
}
关于c# - 基于 Session 值的 MVC OutputCache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11645615/