利用Token防止重复提交(Struts框架)
来源:互联网 发布:传奇霸业轮回每层数据 编辑:程序博客网 时间:2024/05/24 01:51
如果用户对一个html表单多次提交,web应用应该能够判断用户的重复提交行为,并作出相应的处理。
最常见的是新增一条数据,用户已经提交表单并且服务器端已经完成新增成功。此时用户可能有两个误操作:
1.用户通过浏览器的后退功能,返回到录入页面,重复提交(此时浏览器提供回退功能基本上是个邪恶行为)
2.刷新该页面(因为新增成功的提示页面通常是通过请求转发(forward)过来的,所以此操作实际效果通常等同于1)
这样造成的可能结果有:
1.若程序级别和数据库级别限制了重复记录,会提示类似于“xxx字段已存在,请修改后重新保存”的信息
2.若没有此限制,服务器端会再插入一条数据,而这通常不是用户想要的
误操作2和可能结果2的结合就达成了与用户意图相背的结果:服务器端不停地在增加重复记录,用户认为自己只不过是刷新该提示信息页面。
通用的解决思路是:
用户请求录入页面,这个与服务器建立的一次连接过程中,在服务器端①【生成一个session标识,同时返回到客户端一个与此匹配的hidden域】。用户提交了此页面,服务器端首先②【判断此hidden域与session标识是否匹配】,若不匹配,终止保存操作,提示同一表单不能提交两次,同时①【新建一个session标识和hidden域】,返回录入页面;若匹配,执行插入保存操作,同时③【清空(重置reset)session标识】。
Struts正在基于这样的思路在org.apache.struts.action.Action类中提供了内置支持方法:
protected void saveToken(HttpServletRequest request) 配合标签对应于①
protected boolean isTokenValid(HttpServletRequest request) 对应于②
protected void resetToken(HttpServletRequest request) 对应于③
这样我们在写程序的时候,结合Struts的html标签,只要
1.在forward到insert.jsp页面前加一个action执行saveToken(request)操作,或干脆在insert.jsp中写
2.保存前加个判断操作isTokenValid(request)
3.若isTokenValid(request)返回false,执行saveToken(request)操作,返回错误提示页面;true则执行resetToken(request)操作,然后进行实际的保存操作
- 利用Token防止重复提交(Struts框架)
- 利用Token防止重复提交(Struts框架)
- 利用Token防止重复提交(Struts框架)
- 《struts---利用Token防止表单重复提交》
- struts利用Token(令牌)防止用户重复提交
- struts利用Token(令牌)防止用户重复提交
- Struts中token标签防止重复提交
- 利用token来进行防止重复提交
- Struts2利用token防止表单重复提交
- PHP利用token防止表单重复提交
- PHP利用token防止表单重复提交
- 利用Session防止表单重复提交(token)
- 利用Session防止表单重复提交(token)
- 利用Session防止表单重复提交(token)
- Struts-利用Token解决重复提交
- struts利用Token(令牌)防止用户重复提交(转载)
- 防止重复提交token
- 实践struts之token防止回退重复提交表单
- 信息系统业务报表的开发与分析
- Web2.0—悄然改变的在线商业规则?
- 利用XMLHTTP将动态网页生成静态网页
- C#、VB.NET、C++.NET中的按引用传递参数的方式比较
- 通用动态生成静态HTML页方法
- 利用Token防止重复提交(Struts框架)
- javascript加密与解密
- 微软MSDN Wiki ,让自己的名字也进MSDN
- Linux操作系统12则经典应用技巧
- C++各大有名库的介绍
- Instr Function
- 本日学习
- 本日学习
- sql脚本基础命令