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里面取,而是从服务器更新。 这个才是难点呢 --------------------编程问答-------------------- 看看网上有禁止缓存的方法吧,自己可以去看看。 --------------------编程问答-------------------- 网上有这 方面 找下 --------------------编程问答--------------------
你写在哪个页面上,哪个页面才不cache,不会整站都不cache的 --------------------编程问答-------------------- 找了好多地方,还是没有解决方法。再顶
补充:.NET技术 , ASP.NET