当前位置:编程学习 > C#/ASP.NET >>

IE缓存问题,高手进

在做一个多语言的web项目,目前有这样一个bug:
1. 设置你的语言为中文, (这个语言不是OS或者浏览器的语言,就是网页上一个下了列表框,后台根据这个设定线程的文化信息)
2. 访问A页面
3. 访问B页面
4. 更改语言为英语
5. 这时B页面因为有postback,所以显示英语
6. 再访问A页面,因为缓存的原因,这是A页面还是中文。 -- 这就是个bug


这个bug只存在IE上(我试了IE8),在firefox上没有。 我尝试在B页面postback的时候清除cache(如下), 但是没有成功。

foreach(DictionaryEnty de in Httpcontext.current.cache)
   Httpcontext.current.cache.remove(de.ToString());


高手给点建议吧? 整个网站的cache机制还是要的,不能完全禁止它。 --------------------编程问答-------------------- 单独设置页面cache策略。

下面演示一下在Asp.net里面具体的写法:

1.       页面/控件cache可以申明在aspx,ascx文件里面,也可以在code behind里面作出申明。

<%@ OutputCache Duration="#ofseconds"

   Location="Any Client Downstream Server None

     ServerAndClient "

   Shared="True False"

   VaryByControl="controlname"

   VaryByCustom="browser customstring"

   VaryByHeader="headers"

   VaryByParam="parametername"

   CacheProfile="cache profile name ''"

   NoStore="true false"

   SqlDependency="database/table name pair CommandNotification"

%>

主要的参数是:

Duration: cache有效的时间,单位秒

Shared:只对控件有效,在控件可以同时应用与多个页面的时候,多个页面是否可以共享这一个cache而不用每个页面维护自己对这个控件的cache。

VaryByControl:cache随控件的ID变化

VaryByCustom:cache随用户自定义的一个变量来变化,该变量是在这里指定,然后应该在Global.ascx里面实现:

public override string GetVaryByCustomString (

HttpContext context,

string custom

)

该声明的custom参数就是在OutPutcache里面申明的变量。通过在这个函数里面对不同的custom参数返回不同的字符串值来表示不同的cache内容。

VaryByHeader, VaryByParam,CacheProfile也是设置不同的cache版本的。

NoStore表示不允许把cache的内容写到内存以外其它的存储设备上,这是对安全性比较高的内容的需要。

SqlDependency是和数据库相关的。 --------------------编程问答-------------------- 单独设置页面怎么可以呢? 我这次是访问的A,下次是B,再是C,然后改变了语言,再访问原来的页面,还是有缓存。

有没有什么办法可以清除整个网站在IE中的缓存,这样无论哪个网页都没有缓存了,只能从服务器上去取。 --------------------编程问答-------------------- 默认都有客户端缓存,你要给他禁止掉,在每个页面的init过程里
protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        Response.ContentEncoding = Encoding.UTF8;
        Response.Cache.SetExpires(DateTime.Now.AddMinutes(-1));
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.Cache.SetValidUntilExpires(false);
} --------------------编程问答-------------------- 楼上兄弟的方易做图不会导致整个网站都不能cache? 我还是希望有cache的,但是希望改变语言后,不从cache里面取,而是从服务器更新。 这个才是难点呢 --------------------编程问答-------------------- 看看网上有禁止缓存的方法吧,自己可以去看看。 --------------------编程问答-------------------- 网上有这 方面 找下 --------------------编程问答--------------------
引用 4 楼 gmlan_cn 的回复:
楼上兄弟的方易做图不会导致整个网站都不能cache? 我还是希望有cache的,但是希望改变语言后,不从cache里面取,而是从服务器更新。 这个才是难点呢


你写在哪个页面上,哪个页面才不cache,不会整站都不cache的 --------------------编程问答-------------------- 找了好多地方,还是没有解决方法。再顶
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,