asp.net页面缓存

1。 取消缓存


(2)客户端取消

<html>
<head>
<meta http-equiv="Expires" CONTENT="0">
<meta http-equiv="Cache-Control" CONTENT="no-cache">
<meta http-equiv="Pragma" CONTENT="no-cache">
</head>

(3)服务器具端取消:

服务器端:
   Response.Buffer = true;
   Response.ExpiresAbsolute = DateTime.Now.AddDays(-1);
   Response.Cache.SetExpires(DateTime.Now.AddDays(-1));
   Response.Expires = 0;
   Response.CacheControl = "no-cache";
   Response.Cache.SetNoStore();

Global里面: 
protected  void  Application_BeginRequest(Object  sender,  EventArgs  e) 

       HttpContext.Current.Response.Cache.SetNoStore(); 
}
<%@ OutPutCache Location="None"%>

页面基类:
public  class  PageBase  :  Page 

     public  PageBase()  {} 
 
     protected  override  OnLoad(  EventArgs  e  )  { 
             Response.Cache.SetNoStore(); 
             base.OnLoad(); 
     } 

最简单的办法 :-)
学CSDN的这个论坛,在URL后面随机的加一些没用的参数,比如:
http://xxx/xxx/xxx.jpg?p=xxx

IE是用过URL来控制缓存的,这样就解决了

(4)web.config可以设置吧?

2。

(1)客户端缓存和我们常在代码中使用的Cache对象,有什么差别,当我们仅用了客户端缓存时,他对我们在代码中使用的Cache有没有什么影响!

两个完全不同的东西,Cache对象是给你自己缓存东西用的,好处是会自动清理掉过期的东西。客户端缓存是HTTP的一个规范,用于在客户端缓存网页的,有时候我们需要客户端缓存提高浏览速度,减轻服务器负担,但有时候我们又需要在客户端禁用缓存,以避免客户端看到过期的信息

(2)当客户端浏览器被关闭时,要如何移除Cache中的值。当用户是正常注销是可以做到,但是如果用户是直接关闭浏览器要如何实现呢?

<body οnbefοreunlοad="window.open('clear.aspx','','top=4000')">

(3)1.Page.Cache,Context.Cache,HttpRuntime.Cache是否引用同一个Cache对象.

         2.它们之间的区别是什么?

         3.它们的使用场合是什么?

它们指的同一个对象,在某个请求其间,Page.Cache和HttpContext.Current.Cache是有效的,至于这2者的区别,一般是由你调用的地方决定的,如果在Page里,那么用Page.Cache,如果在global.asax或自己的函数里,那么用后者

但如果你需要在某个事件,譬如基于Timer的处理函数里访问,因为其时没有HttpContext,那么用HttpRuntime.Cache

一般情况下,WEB页面都会在Internet临时文件夹中有一个临时文件.
我在操作IE时会出现这种情况:
假如说有一个页面Page1.aspx,在我第一次访问后,它会在我的Internet临时文件夹里有一个Page1.aspx文件生成.之后,如果我改了Page1.aspx的数据后再次访问该页面,发现IE并没有对这个Page1.aspx的数据进行更新,反而打开的是我第一次访问的页面.为什么会这样,是因为IE自动(默认)调用了Internet临时文件夹里有一个Page1.aspx文件,而不是重新下载新的Page1.aspx.
怎样能让IE自动重新下载新的Page1.aspx呢?

一种方法是对Internet选项进行设置.

Internet选项-->常规-->Internet临时文件中"设置"-->每次访问此页时检查.
这种设置时最好同时删除临时文件.
这种方法是让客户自己设置自己的浏览器,如果客户忘记了设置,那么,新的页面总是下载不到本地.这时,客户会怎样认为呢?("肯定是程序的错!"其实也不是程序的错,但是用程序完全可以解决这个问题)

第二种方法:用程序自己来让页面自动下载.

这种方法实际上是让页面不保存到Internet临时文件夹中,每次访问页面都会让浏览器下载页面.
只要在aspx.cs代码的Page_Load事件中加上

Context.Response.Cache.SetCacheability(HttpCacheability.NoCache);

即可.

不防你试试.在不加这句时,你打开页面,Internet临时文件夹里会有一个页面文件,而加了,就会没有了.
不过,像aspx文件中如果有图片文件或js文件,那还是会下载到Internet临时文件夹的.


最近小弟遇一难题,我做一新闻发布系统,新闻的内容应该是动态从数据库中提出来放到一个模版页上的,可是第一次都这样去动态从库里去取的话,实在是影响访问速度,所以我想把每一次发布一个新的新闻的时候都立刻从库中拿出数据(不是请求的时候在拿)在在本地硬盘上把这个生成好的静态页存起来,给一个名字,下次我在请求的时候,直接连接的是我生成的这个静态页(不用在去库中取数据),这样会提高访问速度。那位高手可以将主要代码给编一下,谢谢。急用。

答案;

不用写任何代码,只要启动ASP.NET的页面缓存功能就可以了。你可以设定多长时间进行更新,也可以设定页面哪部分进行缓存。只要启动缓存,系统就直接把第一次访问的结果显示出来,连编译运算都免了。页面中加入<%@ OutputCache Duration="60" VaryByParam="*" %>就可以了。
Duration 必需属性。页面应该被缓存的时间,以秒为单位。必须是正整数。

Location 指定应该对输出进行缓存的位置。如果要指定该参数,则必须是下列选项之一:Any、Client、Downstream、None、Server或ServerAndClient。

VaryByParam 必需属性。Request中变量的名称,这些变量名应该产生单独的缓存条目。“none”表示没有变动。“*”可用于为每个不同的变量数组创建新的缓存条目。变量之间用“;”进行分隔。

VaryByHeader 基于指定的标头中的变动改变缓存条目。

VaryByCustom 允许在global.asax中指定自定义变动(例如,“Browser”)。

利用必需的Duration和VaryByParam选项的组合可以处理大多数情况。例如,如果您的产品目录允许用户基于categoryID和页变量查看目录页,您可以用参数值为“categoryID;page”的VaryByParam将产品目录缓存一段时间(如果产品不是随时都在改变,一小时还是可以接受的,因此,持续时间是3600秒)。这将为每个种类的每个目录页创建单独的缓存条目。每个条目从其第一个请求算起将维持一个小时。
VaryByHeader 和VaryByCustom主要用于根据访问页面的客户端对页面的外观或内容进行自定义。同一个URL可能需要同时为浏览器和移动电话客户端呈现输出,因此,需要针对不同的客户端缓存不同的内容版本。或者,页面有可能已经针对IE进行了优化,针对Netscape或Opera则应取消这种优化功能。后一个例子非常普遍,我们将提供一个说明如何实现此目标的示例:

示例:VaryByCustom用于支持浏览器自定义

为了使每个浏览器都具有单独的缓存条目,VaryByCustom的值可以设置为“browser”。此功能已经内置在缓存模块中,并且将针对每个浏览器名称和主要版本插入单独的页面缓存版本。

<%@ OutputCache Duration="60" VaryByParam="None" VaryByCustom="browser"%>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值