需要一个缓存筛选器属性,该属性将数据保留在缓存中,直到用户登录
本文关键字:缓存 属性 保留 数据 登录 用户 一个 筛选 | 更新日期: 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
只是一个示例,您可以将其替换为身份验证令牌(如果有)或任何其他在用户进行身份验证时保持其值的东西