- 浏览: 197238 次
文章分类
- 全部博客 (224)
- jsp (5)
- jsf (7)
- web (11)
- js (12)
- COBOL (5)
- php (7)
- jconsole (1)
- java (11)
- ajax (1)
- PHP魔法方法 (1)
- 项目管理工具 (3)
- 项目管理 (2)
- svn (8)
- redmine (1)
- mysql (4)
- qrcode,php (1)
- qrcode (1)
- 多进程 (3)
- html (1)
- excel (2)
- seasar2 (1)
- db (1)
- entity (1)
- IOS8 (1)
- SWIFT (1)
- 正则表达式 (1)
- RabbitVCS (1)
- url (1)
- thinkphp (2)
- c++ (5)
- win32 API函数 (1)
- htaccess (1)
- makefile (3)
- C/C++ (12)
- Linux (1)
- miui (2)
- unix (1)
- wechat (1)
- websocket (1)
- SpringMVC (3)
- VSAM (1)
- centos (2)
- wamp (1)
- server (1)
- 优酷视频上传并去除广告 (1)
- owncload (1)
- cloud (1)
- ubuntu (1)
- pdf转换成word (1)
- 微信,weixin (1)
- 行业系统 (3)
- 超级外卖源代码 (0)
- 软件专利 (1)
- 申请 (1)
- vba (1)
- UML (1)
- 程序切片 (1)
- 股票心得 (1)
- 威客建站 (1)
- 微信开发学习路线 (1)
- 远程开机 (1)
- spring mvc (1)
- JEECMS (1)
- Node.js (1)
- ThinkJS (1)
- maven (2)
- MyEclipse+Tomcat+MAVEN+SVN (1)
- Spring+SpringMVC+MyBatis (1)
- wampserver (0)
- RESTful (1)
- hibernate (4)
- Spring+SpringMVC (1)
- 响应式布局 (1)
- 响应式布局模板 (1)
- Aptana (3)
- 遗传算法 (1)
- 进化算法 (1)
- bower (1)
- HTML5 (1)
- Android官方培训课程 (1)
- MySQL锁 (1)
- 扫描枪 (1)
- 微信公众平台 (1)
- 企业号 (1)
- ddns (1)
- java获取外网ip (1)
- DDNS,阿里云,云解析,万网域名,阿里云域名 (1)
- SEO (1)
- Jboss (2)
- wildfly (1)
- WildFly8 (2)
- NT Kernel (1)
- 反向代理 (1)
- Spring嵌套事务 (1)
- apache (3)
- 防止浏览器记住用户名及密码的简单实用方法 (1)
- 时间戳 (1)
- 字体 (1)
- 网络爬虫准 (1)
- 屏蔽后退按钮 (1)
- java web (1)
- JavaMail (1)
- windows服务 (1)
- Freemarker (1)
- TortoiseGit (2)
- oschina (1)
- JSON (1)
- Boost (1)
- MUI (1)
- github (1)
- Python2.7 (1)
- Python3.0 (1)
- Odoo (1)
- java socket (1)
- OpenERP (2)
- werkzeug (1)
- JNA (2)
- proxifier (1)
- WebService (1)
- 企业应用集成 (1)
- vmware (1)
- Navicate (1)
- 三体 (1)
- oracle同步 (1)
- 微信 (3)
- java设计模式 (1)
- 工具 (1)
- JavaScript跨域 (1)
- LB (1)
- 负载均衡 (1)
- AngularJS (1)
- HBuilder (1)
- Echarts (1)
- Json Web Token (1)
- PassportSDK (1)
- ubuntu kylin xterm 乱码 (1)
- ubuntu kylin17 安装字体教程 (1)
- wps (1)
- jetbrains (1)
- MySQL5.7 (1)
- Nginx (1)
- JDK (1)
最新评论
-
cuiyadll:
谢谢楼上的推荐
实战:jQuery Mobile开发HTML5移动应用 -
marty:
使用JQueryMobile,推薦使用這免費開發工具,提供可視 ...
实战:jQuery Mobile开发HTML5移动应用 -
men_clslji:
按照目前的方法只是防止刷新页面时不再执行X(添加),而toke ...
有了上一篇博文,类似地顺便说说表单防重复提交。
表单防重复提交,老鸟略过。做过web的应该都知道,当submit一个表单后,再按浏览器的刷新(F5),表单会再次提交,这样并不是我们想看到的。看了一下华佗的网站,他用的是token机制防重复提交(方法如下:进入页面之时,随机一个数值,可以是Math.random(),也可以是取当前时间…等等。将这个值放入session.setAttribute("token",刚才的随机值),同时也放入表单的一个隐藏文本域<input type=hidden name=token value=刚才的随机值/>。当用户提交的时候,后台首先判断session中的token和表单中的token是否一致,如果相同,则移除session.removeAttribute("token"),允许提交。待用户F5刷新的时候,就不一致了,则说明是重复提交。)不知道这样说,大家能不能明白。
有人就可能会问了,为啥刷新浏览器,会导致表单的重复提交呢?带着这个问题,我们寻求一个更简单的方式,来防止重复提交。(假设表单页为A.jsp,处理添加数据.并查询数据servletB,处理完forward到C.jsp展示所有数据。)按照这样的写法,在跳到C后,按F5,肯定是会重复添加数据的。首先,让人想到的是将forward改为redirect,重定向。这样的确不会重复提交了,但是新问题又来了:C中显示不了数据,因为重定向后,request就拿不到B查询的数据了。好,我们又会想到,B中,用session存储查询好的数据。嗯,不得不承认,这样的确也达到了效果,不过session这玩意,听说要少用。所以,我们不能就此罢休!最后总结了一个比用token方便,也不用session来存数据,的方案:(把servletB删掉,拆成两个servlet:X(负责添加)和Y(负责查询),思路:A->[提交]->X->[重定向]->Y->[请求转发]->C)按照这样的步骤,C能拿到Y查好的数据,而且F5刷新,也不会重复提交(因为多了一步X->Y的操作)。
有人就可能会问了,为啥刷新浏览器,会导致表单的重复提交呢?带着这个问题,我们寻求一个更简单的方式,来防止重复提交。(假设表单页为A.jsp,处理添加数据.并查询数据servletB,处理完forward到C.jsp展示所有数据。)按照这样的写法,在跳到C后,按F5,肯定是会重复添加数据的。首先,让人想到的是将forward改为redirect,重定向。这样的确不会重复提交了,但是新问题又来了:C中显示不了数据,因为重定向后,request就拿不到B查询的数据了。好,我们又会想到,B中,用session存储查询好的数据。嗯,不得不承认,这样的确也达到了效果,不过session这玩意,听说要少用。所以,我们不能就此罢休!最后总结了一个比用token方便,也不用session来存数据,的方案:(把servletB删掉,拆成两个servlet:X(负责添加)和Y(负责查询),思路:A->[提交]->X->[重定向]->Y->[请求转发]->C)按照这样的步骤,C能拿到Y查好的数据,而且F5刷新,也不会重复提交(因为多了一步X->Y的操作)。
评论
1 楼
men_clslji
2013-10-15
按照目前的方法只是防止刷新页面时不再执行X(添加),而token的运用主要还有一点是在网络不理想情况下。
用户多次点击提交按钮,结果是第一次还没响应,也就是还没重定向到Y(查询)时,就再次请求了X(添加)。
使用token就可以很好的避免了此问题,同一页面的请求能保证只执行一次。
用户多次点击提交按钮,结果是第一次还没响应,也就是还没重定向到Y(查询)时,就再次请求了X(添加)。
使用token就可以很好的避免了此问题,同一页面的请求能保证只执行一次。
发表评论
-
微信开发框架哪个好?
2015-05-12 18:26 730weiphp(thinkphp构造) 还一个微擎 -
20款国外知名的php开源cms系统
2015-04-13 16:17 4791内容管理系统,简称CMS,是一种简易的发布和管理新闻的程序。 ... -
系统的伪静态规则
2014-10-27 09:46 469由于Dream系统的内核是Thinkphp3.1,只需将in ... -
HTML5 本地存储 LocalStorage
2014-09-28 10:52 850说到本地存储,这玩 ... -
如何使用FacesContext类
2014-09-03 15:06 817在Faces API中有两个类是要经常使用的. 一个是Face ... -
ServletContextListener使用详解
2014-09-03 14:50 694在 Servlet API 中有一个 Se ... -
seasar2中自动生成DB entity类的方法
2014-09-03 12:00 742步骤1:修改配置文件jdbc.dicon 步骤2:安装相应db ... -
JQuery中$.ajax()方法参数详解
2014-03-06 10:24 705url: 要求为String类型的 ... -
JSF点滴积累--利用PhaseListener实现权限验证
2013-08-28 19:54 806通过PhaseListener 可以在一个点上(JSF生命周期 ... -
弹出窗口(window.open)被各种浏览器拦截的通用处理方法
2013-08-27 15:56 953所有种类的浏览器基本都默认拦截弹出窗口,也就是说(window ... -
JSF点滴积累--权限验证
2013-08-27 15:42 551通过PhaseListener 可以在一个点上(JSF生命 ... -
如何处理logout后,后退按钮(返回键)依旧显示缓存的问题
2013-08-21 16:08 1722在一个有密码保护的Web应用中,正确处理用户退出过程并 ...
相关推荐
NULL 博文链接:https://feng5588feng.iteye.com/blog/1494002
NULL 博文链接:https://minejava.iteye.com/blog/960617
Struts2.0深入学习 命名空间,模型驱动,表单重复提交实例 博文链接:https://zmx.iteye.com/blog/463118
NULL 博文链接:https://ice-cream.iteye.com/blog/320168
NULL 博文链接:https://clw.iteye.com/blog/301343
NULL 博文链接:https://lzj0470.iteye.com/blog/1941682
NULL 博文链接:https://fireinjava.iteye.com/blog/458257
NULL 博文链接:https://sorehead.iteye.com/blog/283680
NULL 博文链接:https://dayongge.iteye.com/blog/2269217
博文链接:https://clarancepeng.iteye.com/blog/112040
NULL 博文链接:https://qjoycn.iteye.com/blog/1513669
https://blog.csdn.net/A757291228 博客的《一篇博文带萌新建站并了解建站体系流程和便捷方式》的资源文件
总结了 用type=submit type=image 单击图片提交 按钮提交等 绝对原创
这个提示符可以帮助你创建一篇博文,告诉一个引人注目的故事,讲述你的产品或服务如何以一种相关且吸引人的方式帮助目标受众实现目标。 Ignore all previous instructions. You are an expert in content creation ...
NULL 博文链接:https://chenzheng8975.iteye.com/blog/1922970
一篇对12306铁路网站问题分析的博文.pdf
Android模拟表单提交 多图选择+多图上传Demo 对应博文:Android原生模拟表单提交上传多图+PHP接收表单数据和多图存储:http://blog.csdn.net/iwanghang/article/details/65630703
NULL 博文链接:https://dayongge.iteye.com/blog/2268976
NULL 博文链接:https://corrinejtt.iteye.com/blog/2242716