针对不同的Cookie做页面缓存

有时我们需要为PC浏览器及移动浏览器生成不同的页面,为了提高性能,不能每次请求都去判断User-Agent,通常用一个 Cookie 标记一下客户端是否是移动客户端,这样只需要读取这个 Cookie 的值就知道这个请求是否是移动端。

这里主要通过 OutputCacheByCustom 来实现对不同的 Cookie 值生成不同的页面,具体做法也比较简单:

1. 在 Global.asmx.cs 里重写 GetVaryByCustomString 函数

这个函数接受两个参数,第一个是 System.Web.HttpContext 对象,包含了对话的上下文,第二个是 string 类型的,用户判断具体采用用户定义的哪种缓存方案。

public override string GetVaryByCustomString(System.Web.HttpContext context, string custom)
{
    if (custom == "IsMobile")
    {
        if (context.Request.Cookies["IsMobile"] == null)
            return string.Empty;
        return context.Request.Cookies["IsMobile"].Value;
    }
    else
    {
        return base.GetVaryByCustomString(context, custom);
    }
}

2. 在需要判断 Cookie 生成不同缓存的 View 上添加 OutputCache Attribute

public class CacheController : Controller
{
    [OutputCache(Duration=60, VaryByCustom="IsMobile",Location=OutputCacheLocation.Server)]
    public ActionResult Index()
    {
        return Content(DateTime.Now.ToString());
    }
}

以上两步就可以了,当然也可以将缓存方案写进 Web.config 配置文件中:

<system.web>
  <caching>
    <outputCacheSettings>
      <outputCacheProfiles>
        <clear />
        <!-- 60 seconds-->
        <add varyByCustom="IsMobile" duration="60" name="ChangeByDevice" location="Server" />
      </outputCacheProfiles>
    </outputCacheSettings>
  </caching>
</system.web>

在 View 相应的位置只需指定 OutputCache 的 CacheProfile

public class CacheController : Controller
{
    [OutputCache(CacheProfile = "ChangeByDevice")]
    public ActionResult Index()
    {
        return Content(DateTime.Now.ToString());
    }
}

测试

打开 http://localhost/cache/index

Output:2014/10/26 13:58:01

在控制台修改 IsMobile 的 Cookie 值

var date = new Date();
var expireDays = 100;
date.setTime(date.getTime() + expireDays*24*3600*1000);
document.cookie = "isMobile=1; path=/; expires=" + date.toGMTString();

重写打开 http://localhost/cache/index

Output:2014/10/26 13:58:16

时间: 2024-10-06 23:56:09

针对不同的Cookie做页面缓存的相关文章

html做页面缓存

使用html写的项目,使用安卓壳子做成App,后台清理后,再次登录App记住登录状态的实现(2019-12-02): 1.设置页面缓存: <meta http-equiv="Cache-Control" content="max-age=7200" /> <meta http-equiv="Expires" content="Mon, 20 Jul 2013 23:00:00 GMT" /> 2.登录后

Mvc4页面缓存设置Cookie导致缓存失效

[OutputCache(Duration = 60, VaryByParam = "none")]        public ActionResult Index()        {            Response.Cache.SetOmitVaryStar(true);            return View();        } 以上代码在新建项目中是可以的.我应用了基类后, 缓存失效,总返回 200, 后来查到是由于我在基类中,重设置了Cookie的过期时间

Nginx反向代理、负载均衡、页面缓存、URL重写及读写分离详解

大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统为 CentOS 6.4 x86_64 , Nginx 是版本是最新版的1.4.2,所以实验用到的软件请点击这里下载:http://yunpan.cn/QXIgqMmVmuZrm 一.前言 在前面的几篇博文中我们主要讲解了Nginx作为Web服务器知识点,主要的知识点有nginx的理论详解.ngin

JSP 页面缓存以及清除缓存

一.概述 缓存的思想可以应用在软件分层的各个层面.它是一种内部机制,对外界而言,是不可感知的. 数据库本身有缓存,持久层也可以缓存.(比如:hibernate,还分1级和2级缓存) 业务层也可以有缓存(但一般来说,这是一个过程域,不会设缓存). 表现层/数据服务层(传统web的表现层)也可以设置缓存(jsp cache 就是这一层,实现在app server上的缓存机制) 另外Browser也有缓存(如IE)这个大家也都知道(实现在 web server 上的缓存机制).越上层的缓存效果越好,越

Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解

大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统为 CentOS 6.4 x86_64 , Nginx 是版本是最新版的1.4.2,所以实验用到的软件请点击这里下载:http://yunpan.cn/QXIgqMmVmuZrm 一.前言 在前面的几篇博文中我们主要讲解了Nginx作为Web服务器知识点,主要的知识点有nginx的理论详解.ngin

MVC3缓存:使用页面缓存

在以前的WebForm的开发中,在页面的头部加上OutputCache即可启用页面缓存,而在MVC3中,使用了Razor模板引擎的话,该如何使用页面缓存呢?如何启用另一个参考的博客地址:http://www.cnblogs.com/luminji/archive/2011/09/14/2174751.html在MVC3中要如果要启用页面缓存,在页面对应的Action前面加上一个OutputCache属性即可. 我们建一个Demo来测试一下,在此Demo中,在View的Home目录下的Index.

nginx+redis 实现 jsp页面缓存,提升系统吞吐率

最近在开发的时候,发现之前APP客户端的一部分页面用的是webview交互,这些页面请求很多,打开一套试卷,将会产生100+的请求量,导致系统性能下降.于是考虑在最靠近客户端的Nginx服务器上做Redis缓存.综合了下网上对于php缓存的资料,经过一番改动,终于搭建成功.由于网上的是针对php的,而且没有说明,对于我这种完全不动运维的人来说,研究下来还是挺痛苦的.所以整理一份比较完整的,供大家参考. 以下的配置中,可能有不适合或者写的有问题的.请留言指出,谢谢! 最终缓存以后,整个项目结构图如

Nginx反向代理 负载均衡 页面缓存 URL重写及读写分离

大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统为 CentOS 6.4 x86_64 , Nginx 是版本是最新版的1.4.2,所以实验用到的软件请点击这里下载:http://yunpan.cn/QXIgqMmVmuZrm 一.前言 在前面的几篇博文中我们主要讲解了Nginx作为Web服务器知识点,主要的知识点有nginx的理论详解.ngin

SP 页面缓存以及清除缓存

JSP 页面缓存以及清除缓存 一.概述 缓存的思想可以应用在软件分层的各个层面.它是一种内部机制,对外界而言,是不可感知的. 数据库本身有缓存,持久层也可以缓存.(比如:hibernate,还分1级和2级缓存) 业务层也可以有缓存(但一般来说,这是一个过程域,不会设缓存). 表现层/数据服务层(传统web的表现层)也可以设置缓存(jsp cache 就是这一层,实现在app server上的缓存机制) 另外Browser也有缓存(如IE)这个大家也都知道(实现在 web server 上的缓存机