需要一个缓存筛选器属性,该属性将数据保留在缓存中,直到用户登录

本文关键字:缓存 属性 保留 数据 登录 用户 一个 筛选 | 更新日期: 2023-09-27 18:31:20

我想要一个写入过滤器,该属性将数据保存在缓存中,直到用户登录。我有一个用户可以看到的用户图像。我正在从缓存访问图像。现在,如果用户图像更新图像,他仍然可以看到旧图像,因为我正在从缓存中获取图像。但是当用户注销然后登录时,他仍然可以看到旧图像,因为原因是我正在从缓存中访问数据。我希望用户在注销然后登录时应该看到更新的图像,并且我为此使用了缓存。如何为其编写缓存筛选器属性。

需要一个缓存筛选器属性,该属性将数据保留在缓存中,直到用户登录

除非您

使用querystring或其他路由参数,否则HttpResponse.RemoveOutputCacheItem应该可以工作。

您始终可以使用VaryByCustom来确保缓存仅在会话期间保留,但必须确保在用户注销后清除会话。

Global.asax.cs:

public class MvcApplication : HttpApplication
{ 
  ... 
 public override string GetVaryByCustomString(HttpContext context, string custom)
 {
    if (custom == "session") return context.Session.SessionID;
    return base.GetVaryByCustomString(context, custom);
 }

然后用参数装饰你的动作:

public  class UserController : Controller
{
    [OutputCache(Duration = 600, VaryByCustom = "session")]
    public virtual FileContentResult UserImage()
    {

很少的事情 - 您必须确保SessionId在用户登录时更新,并在注销时放弃。不确定您使用的是哪个身份验证提供程序,当用户登录时,也值得在会话中放入一些内容以避免更改SessionId

SessionId只是一个示例,您可以将其替换为身份验证令牌(如果有)或任何其他在用户进行身份验证时保持其值的东西