jsp+javabean+servlet里如何防止用户能过刷新重复的提交数据。
我现在做的是一个jsp+javabean+servlet的系统啊
是用servlet来处理业务逻辑所以地址栏上URL地址上老是停在第一次调用servlet上面
所以如果用户发现这个问题的话他们就可以通过刷新重复的刷新写入数据啊
大家有没有什么好的解决方案呢
更多 0 分享到:
相关主题推荐: javabean servlet jsp 解决方案 数据
相关帖子推荐:
修改与读取频繁的情况怎么优化?有没有方法让一张表读写分离?求助JSP组织树的实现SSH的jsp中使用${message}却没有数据输出SQL语句怎么写表单提交在另一个页面显示的问题求解 从一个数据库的数据 导到别一个数据库的数据同步问题SD卡写入时间
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理 回复次数:13
dreamover
关注
dreamover
dreamover
等级:Blank
#1 得分:0 回复于: 2006-08-08 11:58:18
显示表单的时候在session中生成一个随机数
<%
Integer flag=new Integer(rand.nextInt());
session.setAttribute(“flag”,flag);
%>
<input type=hidden name=”flag” value=”<%=flag%>”>
在提交时验证
Integer flag = new Integer(Integer.parseInt(request.getParameter(“flag”)));
if(flag.equals(session.getAttribute(“flag”)){
//更新数据
session.removeAttribute(“flag”);
}else{
//重复提交了,处理代码
}
关注CSDN社区微信 投稿有礼了!对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
feigme
关注
feigme
feigme
等级:Blank
#2 得分:0 回复于: 2006-08-08 12:06:27
楼上方法不错
也可以用
判断来源页面
当前页面刷新肯定是不过的
如果您对CSDN论坛有意见和建议 请直接在本帖指教对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
dreamover
关注
dreamover
dreamover
等级:Blank
#3 得分:0 回复于: 2006-08-08 12:06:59
可以再改进一下,把销毁和新建一个标识放在一起进行
sessionlistener里sessioncreated方法里
session.setAttribute(“flag”,初始值);
生成表单页面时
<input type=hidden name=”flag” value=”<%=session.getAttribute(“flag”)%>”>
表单处理时
Integer flag = new Integer(Integer.parseInt(request.getParameter(“flag”)));
if(flag.equals(session.getAttribute(“flag”)){
//更新数据
resetFlag();
}else{
//重复提交了,处理代码
}
void resetFlag(){
session.setAttribute(“flag”,rand.nextInt);
}
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
theforever
关注
theforever
碧海情天-赵亮
等级:Blank
252
#4 得分:0 回复于: 2006-08-08 14:04:07
好
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
software_apprentice
关注
software_apprentice
software_apprentice
等级:Blank
#5 得分:0 回复于: 2006-08-08 14:08:35
struts框架有利用Token(就是楼上所说的随机数)防止重复提交的部分,楼主可以参考一下
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
feyge
关注
feyge
feyge
等级:Blank
#6 得分:0 回复于: 2006-08-16 10:13:59
sign
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
xiariguji
关注
xiariguji
xiariguji
等级:Blank
#7 得分:0 回复于: 2006-08-16 15:44:03
dreamover(梦醒了) ( ) 信誉:100 2006-8-8 11:58:18 得分: 0
显示表单的时候在session中生成一个随机数
<%
Integer flag=new Integer(rand.nextInt());
session.setAttribute(“flag”,flag);
%>
<input type=hidden name=”flag” value=”<%=flag%>”>
在提交时验证
Integer flag = new Integer(Integer.parseInt(request.getParameter(“flag”)));
if(flag.equals(session.getAttribute(“flag”)){
//更新数据
session.removeAttribute(“flag”);
}else{
//重复提交了,处理代码
}
这个有个问题就是这样的.
当用户第一次提交数据的时(没刷新).
这个时候代码是没问题.
数据操作完成就removeAttribute()了.
当用户刷新时,确实不会通过.不过这个时候session.getAttribute(“flag”)并没有flag了..
所以程序会报错.
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
xiariguji
关注
xiariguji
xiariguji
等级:Blank
#8 得分:0 回复于: 2006-08-16 15:49:54
可以再改进一下,把销毁和新建一个标识放在一起进行
sessionlistener里sessioncreated方法里
session.setAttribute(“flag”,初始值);
生成表单页面时
<input type=hidden name=”flag” value=”<%=session.getAttribute(“flag”)%>”>
表单处理时
Integer flag = new Integer(Integer.parseInt(request.getParameter(“flag”)));
if(flag.equals(session.getAttribute(“flag”)){
//更新数据
resetFlag();
}else{
//重复提交了,处理代码
}
void resetFlag(){
session.setAttribute(“flag”,rand.nextInt);
}
这个代码确实避免了程序的报错.
采用的原理是随即生成的随即数很大程度上是不会相同的.
不过也要避免.万一你提交后产生的随即数和开始的相同(虽然几率很小.几乎没有.)
可是程序开发,要做到能避免就避免的.
所以我觉得在void resetFlag()
{
Integer flags=new Integer(rand.nextInt());
if(flags==flag)
{
flags=new Integer(rand.nextInt());
}
else
{
session.setAttribute(“flag”,rand.nextInt);
}
}
楼主做人要厚道,记得结贴给分哦
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
dreamover
关注
dreamover
dreamover
等级:Blank
#9 得分:0 回复于: 2006-08-16 15:56:57
这个有个问题就是这样的.
当用户第一次提交数据的时(没刷新).
这个时候代码是没问题.
数据操作完成就removeAttribute()了.
当用户刷新时,确实不会通过.不过这个时候session.getAttribute(“flag”)并没有flag了..
所以程序会报错.
=============================================
这儿不会报错的,因为我的session.getAttribute(“flag”)是在equals()方法里
http://bbs.csdn.net/topics/90191916
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
china2001ok
关注
china2001ok
china2001ok
等级:Blank
#10 得分:0 回复于: 2006-08-16 15:58:53
LZ也可以通过时间判断啊一样的
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
sqlx
关注
sqlx
daxu
等级:Blank
#11 得分:0 回复于: 2006-08-16 16:28:15
看看
对我有用[0] 丢个板砖[0] 引用 | 举报 | 管理
huihui0103
关注
huihui0103
huihui0103
等级:Blank
#12 得分:0 回复于: 2006-08-16 17:19:11
mark!up!!!