Session什么意思?一文带你超详细了解Session的原理及应用( 二 )


解决方案:使用重定向跳转到目标页面
2)提交表单后 , 由于网速差等原因 , 服务器还未返回结果 , 连续点击提交按钮 , 会重 复提交 。
- 根本原因:按钮可以多次点击
- 解决方案:通过 js , 使得按钮只能提交一次 。
$(“#form1”).submit(function(){ $(“#sub_btn”).prop(“disabled”,true);})
3)表单提交后 , 点击浏览器回退按钮 , 不刷新页面 , 点击提交按钮再次提交表单
- 根本原因:服务器并不能识别请求是否重复 。
- 解决方案:使用 token 机制 。
1、页面生成时 , 产生一个唯一的 token 值 。将此值放入
2、表单提交时 , 带上这个 token 值 。
3、服务端验证 token 值存在 , 则提交表单 , 然后移除此值 。验证 token 不存在 , 说明是之前验证过一次被移除了 , 所以是重复请求 。不予处理
原理:

Session什么意思?一文带你超详细了解Session的原理及应用

文章插图
代码:
jsp 页面
测试表单重复提交
用户名:密码:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession();String token = request.getParameter("token");Object attribute = session.getAttribute(token); response.setContentType("text/html;charset=UTF-8"); if(attribute!=null){session.removeAttribute(token); response.getWriter().write("请求成功!"); }else{ response.getWriter().write("请不要重复请求!"); }}
其实防止重复提交的核心就是让服务器有一个字段能来识别此次请求是否已经执行 。这个字段需要页面传递过来 , 因为只要回退回去的页面 , 字段都是一致的 。不会变化 ,  通过这个特性我们想到了 token 机制来防止重复提交
欢迎工作一到五年的Java工程师朋友们加入Java程序员开发:
群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、源码 ,  , Netty,Redis,Kafka,Mysql,,,,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己 , 不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻 , 使劲拼 , 给未来的自己一个交代!
郑重声明:本文版权归原作者所有 , 转载文章仅为传播更多信息之目的 , 如作者信息标记有误 , 请第一时间联系我们修改或删除 , 谢谢 。