关于表单重复提交的一个小疑问

我叫阿狸猫 2012-10-30 09:56:00

表单重复提交的实现是:
1.在显示提交页面的时候是通过servlet或action转发后显示的,此时页面中有一个隐藏域存放servlet或action中设置的唯一标识
2.并且这个唯一标识在session中也存放了一个一样的。
3.当表单提交到一个servlet或action的时候,servlet或action会将页面中的唯一标识和session存放的唯一标示进行对比,
如果相同则将session里的唯一标示删除,并且往下执行增加数据操作,
如果不同则返回给用户信息重复提交的提示。


基于一个例子:
当用户点击一个增加用户的超链接,页面跳转到一个增加用户页面,当成功添加数据后,点击后退再提交(不管数据改没改)和刷新都是不能再成功写入数据库了。但是重新点击超链接填写完数据后可以再添加用户。

小弟到这里有一个疑问:
session是浏览器一连接到服务器就建立的,那么只要用户不关闭浏览器再进行连接的话,用的都是同一个session。那么在上面的第3个步骤中所执行的操作,(如果表单隐藏域中的唯一标示和当前session里存放的唯一标识一致的话则删除session中的唯一标识)不是会导致点击那个增加超链接也不能正常添加了么?因为session都是同一个并没有创建新的。
可是实际结果却是当点击增加用户超链接填写完数据可以再次添加数据,也没有关闭浏览器重新打开。


求大神
...全文
107 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
我叫阿狸猫 2012-11-01
  • 打赏
  • 举报
回复
原来每次进入增加用户页面都是从一个action里跳转过来,在action里会有一个向session和request增加唯一标识的操作,所以不用怕session里的唯一标识删除后,在不关浏览器的情况下不能再次增加用户。
jackson_fighting 2012-10-31
  • 打赏
  • 举报
回复
楼主了解下 struts的 token 吧
「已注销」 2012-10-31
  • 打赏
  • 举报
回复
防止重复提交仅仅针对于表单提交。单击超链接不必添加唯一标识,也不必进行过滤。
只在表单中添加隐藏域,过滤器或拦截器只会过滤或拦截表单提交。
其他情况不添加隐藏域,也没有过滤器或拦截器。
因此这种方式是完全行得通的。
javamyself 2012-10-30
  • 打赏
  • 举报
回复

貌似看懂了你的需求,你就是要在新增用户的时候控制一下不能反复提交到后台处理是吧,我之前也碰到这样的问题,我的解决方案是:点击之后灰掉按钮 不能重复点击<input type="button" disabled="true"/>
还可以根据action 或者 servelt获取到用户名到数据库查询,如果有了则提示用户不能多次提交,还可以根据一种方式既是:令牌,具体可以百度下 也是和session有关。
我叫阿狸猫 2012-10-30
  • 打赏
  • 举报
回复
求大神!!!

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧