springMVC 怎样处理 浏览器返回时重复提交表单
1个回答
展开全部
问题描述:比如有一个在线测试的页面,当用户提交页面之后,调到呈现测试结果的页面(这个页面中会给出参考答案之类的),这个时候就不能让用户再后退到之前的测试页面进行重新做题,然后提交了。有人可能会说,将用户做两次这样的情况放到服务器端的业务部分进行验证不就行了吗?这样是可以的,但是却增加了服务器端的负担(要先去数据库中查找相应的记录,然后再判断)。将这个功能尽量转移到客户端去做。下面是一些方法:
(1)
<scriptlanguage="JavaScript">
javascript:window.history.forward(1); //目前先用着这个
</script>
利用JS产生一个“前进”的动作,以抵消后退功能,这种方法应该是最简洁的,并且不需要考虑用户连点两次或多次“后退”的情况,缺点是当用户端禁用了JavaScript之后即失效。
(2)
<AHREF="logout.do"onclick="javascript:location.replace(this.href); event.returnValue=false;">
Logout(Back Disabled)
</A>
这种方法用链接页面的URL替换了当前的历史纪录,这样浏览历史记录中就不会有本页面,后退按钮将不能回到本页面。用户点击“Logout”链接注销并执行新页面,这时当用户点击“后退”按钮将不能回到本页,而是回到在本页之前打开的那个页面。
也就是说,这种方法清除的是最后一个访问历史记录,而不是全部的访问记录,这是该方法的一个缺点,当然可以在每一个业务页面都添加这段代码作为保护。另外,和上一种方法相同,当用户端禁用了JavaScript之后即失效。
3、
<scriptlanguage="JavaScript">
functionlogout()
{
window.close(true);
window.open("logout.do");
}
</script>
<buttononClick="logout()">Logout</button>
这种方法比较偷懒,关掉浏览器再重新开,经过测试在视觉上几乎感觉不出来延时,同时又保证了后退按钮不可用(新窗口浏览器后退按钮为灰色),看起来似乎是个好方法,但缺点也比较明显:
首先,关闭和重开的浏览器窗口大小可能不同,用户可以明显看出这一过程,并且在一定程度上影响操作。
其次,同上,这是一个JavaScript方法。
以上方法都是针对“后退”按钮作出的反应,客户端浏览器需要打开JavaScript代码,下面尝试从另一角度来解决这一问题:
4、禁止缓存
<%
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Cache-Control", "no-store");
response.setDateHeader("Expires", 0);
response.setHeader("Pragma", "no-cache");
%>
这种方法使用服务器端脚本,强制浏览器重新访问服务器下载页面,而不从缓存读取,结合strutsjsp页面中的<logic>标签实现重新定向。
(1)
<scriptlanguage="JavaScript">
javascript:window.history.forward(1); //目前先用着这个
</script>
利用JS产生一个“前进”的动作,以抵消后退功能,这种方法应该是最简洁的,并且不需要考虑用户连点两次或多次“后退”的情况,缺点是当用户端禁用了JavaScript之后即失效。
(2)
<AHREF="logout.do"onclick="javascript:location.replace(this.href); event.returnValue=false;">
Logout(Back Disabled)
</A>
这种方法用链接页面的URL替换了当前的历史纪录,这样浏览历史记录中就不会有本页面,后退按钮将不能回到本页面。用户点击“Logout”链接注销并执行新页面,这时当用户点击“后退”按钮将不能回到本页,而是回到在本页之前打开的那个页面。
也就是说,这种方法清除的是最后一个访问历史记录,而不是全部的访问记录,这是该方法的一个缺点,当然可以在每一个业务页面都添加这段代码作为保护。另外,和上一种方法相同,当用户端禁用了JavaScript之后即失效。
3、
<scriptlanguage="JavaScript">
functionlogout()
{
window.close(true);
window.open("logout.do");
}
</script>
<buttononClick="logout()">Logout</button>
这种方法比较偷懒,关掉浏览器再重新开,经过测试在视觉上几乎感觉不出来延时,同时又保证了后退按钮不可用(新窗口浏览器后退按钮为灰色),看起来似乎是个好方法,但缺点也比较明显:
首先,关闭和重开的浏览器窗口大小可能不同,用户可以明显看出这一过程,并且在一定程度上影响操作。
其次,同上,这是一个JavaScript方法。
以上方法都是针对“后退”按钮作出的反应,客户端浏览器需要打开JavaScript代码,下面尝试从另一角度来解决这一问题:
4、禁止缓存
<%
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Cache-Control", "no-store");
response.setDateHeader("Expires", 0);
response.setHeader("Pragma", "no-cache");
%>
这种方法使用服务器端脚本,强制浏览器重新访问服务器下载页面,而不从缓存读取,结合strutsjsp页面中的<logic>标签实现重新定向。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询