在网上搜索了很多禁止掉浏览器后退的方法,大都是说禁用缓存或使用JS跳转。其实浏览器的后退前进按钮我们本身是无法控制的,之所以还有要禁止后退的一些功能需要,主要还是存在提交表单、身份验证等应用场景,避免用户重复提交数据等。下面我从几次层面来说明实现禁止掉浏览器后退的效果。
1.客户端JS跳转
如果单只需要在客户端跳转页面,可以直接使用“location.replace('Test.aspx');”,这样页面跳转不会保留之前页面的历史记录,也没有办法后退到之前页面。但我们一般和服务器端交互都会要提交表单,会存在向服务器再POST数据请求,因此这种只使用客户端JS跳转还是不够的。
2.禁止缓存
禁止缓存的作用在于是客户端总是重新获取服务器请求,而不会加载浏览器本地缓存的副本,这在验证登录等场景是非常重要的,比如像输入的验证码,这个应该只能一次有效而不会被缓存。禁止缓存并不能禁止用户进行后退,但浏览器每次会重新请求获取后退到的页面,不再保留用户原来提交表单输入的数据,相当于重新打开页面,只要每次重新验证这样是没有问题的。如果用户尝试使用浏览器中的缓存版本提交数据,IE中会出现“网页已过期”的提示。禁止缓存的代码如下:
<</span>meta http-equiv="Pragma" content="no-cache" />
<</span>meta http-equiv="Cache-Control" content="no-cache" />
<</span>meta http-equiv="Expires" content="0" />
//.Net(C#)禁用后台页面浏览器缓存
Response.Buffer = true;
Response.ExpiresAbsolute = System.DateTime.Now.AddSeconds(-1);
Response.Expires = 0;
Response.CacheControl = "no-cache";
Response.AddHeader("Pragma", "No-Cache");
3.让后退停在当前页面
通过使用禁掉缓存功能,这样用户即使后退或在历史记录中点击进入到原来的页面,这样也没有问题了。当跳转到新页面时,我们还可以使用个办法让用户点后退按钮也停留在新页面,原理是在新页面打开时再自动刷新一次页面,产生一条浏览页面历史记录,这样再后退也就还是停留在新页面了,新跳转的页面增加的代码如下:
var isForward = location.search.indexOf('forward=1') == -1;
if (isForward) {
location = (location.href + (location.search.indexOf('?') == -1 ? '?' : '&') + 'forward=1');
}
//if ('