手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表2008年07月2日的文章

提交表单如何防刷新?

自从有表单提交开始,这就是一直被人关注的话题。
搜索一下google,你可以搜到N条纪录,可是真正对你有用的有几条呢?

你搜索到的大多数都是讲的ASP网站下如何处理,少数讲了.net的,java的都放到框架里了,剩下的PHP的都是说用Session来解决。当然也有人回复直接加header标签,让他永远过期。就不会重复提交了。。

事实有用吗?我们一一看来,ASP的我们直接忽略,当然也可以参考他的一些方法而且PHP实现,但现在不看。一来,类似的方法PHP也有,二来,不喜欢ASP(这可以算个理由吧)

1、用session,表面上很不错,就和验证码似的,提交的时候判断是否与session的赋值相等,如果相等就提交,同时再注销这个session变量。不错,确实可行,但,如果表单的显示、提交、处理都在同一个页面里怎么办?根本无法处理,直接无视

2、JS控制,说是在没有提交的时候,var一个变量为false,onsubmit的时候,将它赋值为true,同时判断,如果是true就不让提交。听听是不错,可惜,实现起来并不是想象的这么容易。一旦提交后在跳转时按F5,这些就是白搭 。

3、disabled提交按钮。有用吗?效果同上

4、用COOKIE,有用吗???真的有用吗???或许吧,但是如果客户端关闭了cookie怎么办?那岂不是永远不会被提交了?

5、header过期。我开始也以为有用,并且在跳转函数前加上了这些。共四行代码哦。具体什么代码,我就不贴了,网上一搜一大堆。但实际中,如果问题和第一条相同,这点根本无法处理。

 

我现在怎么做?我现在是记录提交时间,刷新的时候用当前时间减去这个提交时间,如果在一定时间内就提示不能刷新。然后置时间为0,并强行跳转到列表页。

其实现在的很多框架都已经有处理。TP就是内置的。

很多论坛里面也有类似的处理,象discuz等等,可是,就象我说的,如果提交、显示都在同一个页面,那处理起来就复杂了。

虽然很多人说,这样并不建议,但已经这样了,我也总要找个解决方法的吧??对不?

Tags: 表单, 防刷新