5月 182009
 

最近有一个需求,就是用户使用post方式登录,然后退出;再点击浏览器的后退按钮回退到发送post请求的那个位置,这时刷新页面,用户名、密码等信息会重新发送,这样,显示用户已登录。下面给出几种避免这种现象的办法:

登录成功后并不直接显示页面,而是:

1. 使用header方式跳转到本页

2. 使用html里的meta来刷新到本页

3. 使用JavaScript的 location.replace() 方法,刷新到本页;注意不能用location.href = …;详见二者的区别

这三种方法本质是一样的,就是让第二次的get请求覆盖上次post请求,这样浏览器的history里面就不会有那次post请求了,用户也就回退不到那次post请求的位置了

 

应该还有更好的办法,但是目前还没有发现,继续探索…

 Posted by at 下午 7:51
4月 132009
 

1. 浏览器缓存问题一般通过在http头里添加cache-control 可以控制

对于一般的浏览器,只要cache-control: no-cache ,这样浏览器的后退也不会走cache了,但是firfox就不行,需要 cache-control: no-cache, no-store

后来由遇到了safari,对于后退按钮,no-store 也不要使了,官方的解释是在页面里添加一个iframe,只要有iframe,后退就不会走cache了

 

相关文章:

————–如何禁止页面在safari中缓存—————————————————

基本上safari会缓存所有页面以便加速访问。如果要禁止页面在safari中缓存,常用的header肯定要加上的

<?php

header(”Expires: Mon, 26 Jul 1997 05:00:00 GMT”); // Date in the past

header(”Last-Modified: ” . gmdate(”D, d M Y H:i:s”) . ” GMT”); // always modified

header(”Cache-Control: no-store, no-cache, must-revalidate, max-age=0″); // HTTP/1.1

header(”Cache-Control: post-check=0, pre-check=0″, false);

header(”Pragma: no-cache”); // HTTP/1.0

?>

加上上面这些header,可以让页面在大多数浏览器中都不缓存。但还是有个问题,上面的代码对safari的前进和后退不起作用,safari还是会在缓存里面读取数据。要做到完全禁止,根据官方的Safari Developer FAQ,还需要在页面中加上一个iframe。加上iframe后的页面,safari永远不缓存。

<iframe style=”height:0px;width:0px;visibility:hidden” src=”about:blank”>

this frame prevents back forward cache

</iframe>

——————————————————————————————-

 

相关文章2:

http://www.apple.com.cn/developer/internet/webcontent/safari_faq.html

 

 Posted by at 下午 10:26