一种防止数据重复提交的方法和服务器的制造方法

文档序号:7799188阅读:259来源:国知局
一种防止数据重复提交的方法和服务器的制造方法
【专利摘要】本发明提出一种防止数据重复提交的方法及服务器,其中方法包括:生成当前网页对应的身份标识、令牌(Token)和令牌名(TokenName),保存所述身份标识与TokenName的组合与Token的对应关系;将所述身份标识、Token和TokenName发送至客户端;接收来自客户端的网页数据提交请求,从所述网页数据提交请求中获取身份标识、Token和TokenName;查找是否保存有该身份标识与TokenName的组合所对应的Token,如果是,则判断所述从网页数据提交请求中获取的Token与查找到的Token是否一致,如果一致,则删除所述查找到的Token及其对应的身份标识与TokenName的组合。本发明能够不依赖于会话(Session)机制实现防止数据重复提交。
【专利说明】一种防止数据重复提交的方法和服务器
【技术领域】
[0001]本发明涉及Web应用系统【技术领域】,尤其涉及一种防止数据重复提交的方法和服务器。
【背景技术】
[0002]在当今的Web应用系统中,都会存在一些重要操作,比如提交申请或网银支付。而这些操作都可能会因为网络的延迟、应用系统服务超时或其它原因造成数据重复提交,目前,绝大多数Web应用系统中都会自己开发或采用开源框架实现防止数据重复提交的功倉泛。
[0003]目前,防止数据重复提交的方法实现方式如下:
[0004]第一阶段,如图1所示,用户进入网页后,Web应用系统生成每个用户的会话(Session),并生成该Session对应的令牌(Token),保存该Token ;同时,Web应用系统将该Token存储在网页信息中,并将该网页信息发送至客户端。
[0005]第二阶段,如图2所示,用于提交网页时,Web应用系统获取网页中的Token,并获取本地保存的当前Session所对应的Token,判断网页中的Token与当前Session所对应的Token是否一致,如果是,则表明用户是正常提交数据;否则,表明该用户是重复提交数据。
[0006]可见,现有的防止数据重复提交的方法必须依赖于Session机制;而对于集群部署Web应用系统,大部分采用禁用Session,即使可以使用Session,也必须保证每台机器的Session 一致。可见,现有的防止数据重复提交的方法因必须依赖于Session机制而存在一定的使用限制。

【发明内容】

[0007]本发明提供了一种防止数据重复提交的方法,能够不依赖于Session机制防止数据重复提交。
[0008]本发明还提供了一种防止数据重复提交的服务器,能够不依赖于Session机制防止数据重复提交。
[0009]本发明的技术方案是这样实现的:
[0010]一种防止数据重复提交的方法,包括:
[0011]生成当前网页对应的身份标识、令牌(Token)和令牌名(TokenName),保存所述身份标识与TokenName的组合与Token的对应关系;将所述身份标识、Token和TokenName发送至客户端;
[0012]接收来自客户端的网页数据提交请求,从所述网页数据提交请求中获取身份标识、Token和TokenName ;查找是否保存有该身份标识与TokenName的组合所对应的Token,如果是,则判断所述从网页数据提交请求中获取的Token与查找到的Token是否一致,如果一致,则删除所述查找到的Token及其对应的身份标识与TokenName的组合。
[0013]上述方法中,生成当前网页的身份标识的方式可以为:[0014]判断所述当前网页的Cookie中是否保存有当前网页对应的身份标识,如果没有,则生成所述当前网页对应的身份标识,并将所述身份标识保存在当前网页的Cookie中。
[0015]保存身份标识与TokenName的组合与Token的对应关系方式可以为:
[0016]将所述身份标识与TokenName作为缓存键值(Key),并将Token作为该缓存Key对应的缓存值(Value)进行保存。
[0017]将身份标识、Token和TokenName发送至客户端的方式可以为:
[0018]将所述身份标识携带在当前网页的Cookie中,并将所述当前网页的Cookie发送至客户端;
[0019]并且,将所述Token和TokenName携带在当前网页的信息中,并将所述当前网页的信息发送至客户端。
[0020]查找是否保存有该身份标识与TokenName的组合所对应的Token之前可以进一步包括:
[0021]如果从所述网页数据提交请求中无法获取到身份标识、Token和TokenName中的任意一个,则向所述客户端反馈数据提交失败消息。
[0022]当查找到没有保存该身份标识与TokenName的组合所对应的Token时,可以向所述客户端反馈数据提交失败消息;
[0023]当判断出从网页数据提交请求中获取的Token与查找到的Token不一致时,可以向所述客户端反馈数据提交失败消息;
[0024]删除查找到的Token及其对应的身份标识与TokenName的组合之后可以进一步包括:判断是否删除成功,如果是,则向所述客户端反馈数据提交成功消息;否则,向所述客户端反馈数据提交失败消息。
[0025]一种防止数据重复提交的服务器,包括:
[0026]标识生成模块,用于生成当前网页对应的身份标识、Token和TokenName,
[0027]标识保存模块,用于保存所述身份标识与TokenName的组合与Token的对应关系;
[0028]标识发送模块,用于将所述身份标识、Token和TokenName发送至客户端;
[0029]重复提交判断模块,用于接收来自客户端的网页数据提交请求,从所述网页数据提交请求中获取身份标识、Token和TokenName ;查找所述标识保存模块中是否保存有该身份标识与TokenName的组合所对应的Token,如果是,则判断所述从网页数据提交请求中获取的Token与查找到的Token是否一致,如果一致,则删除所述查找到的Token及其对应的身份标识与TokenName的组合。
[0030]上述服务器中,标识生成模块可以判断所述当前网页的Cookie中是否保存有当前网页对应的身份标识,如果没有,则生成所述当前网页对应的身份标识,并将所述身份标识保存在当前网页的Cookie中。
[0031]标识保存模块保存身份标识与TokenName的组合与Token的对应关系方式可以为:将所述身份标识与TokenName作为缓存Key,并将Token作为该缓存Key对应的缓存Value进行保存。
[0032]标识发送模块可以将所述身份标识携带在当前网页的Cookie中,并将所述当前网页的Cookie发送至客户端;并且,将所述Token和TokenName携带在当前网页的信息中,并将所述当前网页的信息发送至客户端。
[0033]重复提交判断模块还可以用于,当从所述网页数据提交请求中无法获取到身份标识、Token和TokenName中的任意一个时,向所述客户端反馈数据提交失败消息。
[0034]当查找到标识保存模块中没有保存该身份标识与TokenName的组合所对应的Token时,向所述客户端反馈数据提交失败消息;当判断出从网页数据提交请求中获取的Token与查找到的Token不一致时,向所述客户端反馈数据提交失败消息;
[0035]删除查找到的Token及其对应的身份标识与TokenName的组合之后,进一步判断是否删除成功,如果是,则向所述客户端反馈数据提交成功消息;否则,向所述客户端反馈数据提交失败消息。
[0036]可见,本发明提出的防止数据重复提交的方法和服务器,能够基于Cookie机制和缓存机制实现防止数据重复提交,从而解除了对Session机制的依赖。
【专利附图】

【附图说明】
[0037]图1为现有技术中防止数据重复提交的方法阶段一示意图;
[0038]图2为现有技术中防止数据重复提交的方法阶段二示意图;
[0039]图3为本发明提出的防止数据重复提交的方法实现流程图;
[0040]图4为实施例一中用户进入网页阶段的实现流程图;
[0041]图5为实施例一中用户提交网页阶段的实现流程图。
[0042]图6为本发明提出的防止数据重复提交的服务器结构示意图。
【具体实施方式】
[0043]本发明提出一种防止数据重复提交的方法,如图3为该方法实现流程图,包括:
[0044]步骤301:生成当前网页对应的身份标识、Token和TokenName,保存所述身份标识与TokenName的组合与Token的对应关系;将所述身份标识、Token和TokenName发送至客户端;
[0045]步骤302:接收来自客户端的网页数据提交请求,从所述网页数据提交请求中获取身份标识、Token和TokenName ;
[0046]步骤303:查找是否保存有该身份标识与TokenName的组合所对应的Token,如果是,则执行步骤304 ;
[0047]步骤304:判断所述从网页数据提交请求中获取的Token与查找到的Token是否一致,如果一致,则执行步骤305 ;
[0048]步骤305:删除所述查找到的Token及其对应的身份标识与TokenName的组合。
[0049]上述步骤301中,生成当前网页的身份标识的方式可以为:判断当前网页的Cookie中是否保存有当前网页对应的身份标识,如果没有,则生成当前网页对应的身份标识,并将所述身份标识保存在当前网页的Cookie中。
[0050]上述步骤301中,保存身份标识与TokenName的组合与Token的对应关系方式可以为:将身份标识与TokenName作为缓存Key,并将Token作为该缓存Key对应的缓存Value进行保存。
[0051]上述步骤301中,将身份标识、Token和TokenName发送至客户端的方式可以为:将身份标识携带在当前网页的Cookie中,并将当前网页的Cookie发送至客户端;将Token和TokenName携带在当前网页的信息中,并将当前网页的信息发送至客户端。
[0052]上述步骤302之后、并在步骤303之前可以进一步包括:如果从网页数据提交请求中无法获取到身份标识、Token和TokenName中的任意一个,贝U向客户端反馈数据提交失败消息。
[0053]上述步骤303可以进一步包括:当查找到没有保存该身份标识与TokenName的组合所对应的Token时,向客户端反馈数据提交失败消息;
[0054]上述步骤304可以进一步包括:当判断出从网页数据提交请求中获取的Token与查找到的Token不一致时,向所述客户端反馈数据提交失败消息;
[0055]上述步骤305之后可以进一步包括:判断是否删除成功,如果是,则向客户端反馈数据提交成功消息;否则,向客户端反馈数据提交失败消息。
[0056]以下举具体的实施例详细介绍。
[0057]实施例一:
[0058]本实施例基于Cookie机制和缓存机制实现防止网页数据重复提交。本实施例可以包括用户进入网页和提交网页两个阶段。如图4为本实施例中用户进入网页阶段的实现流程图,图5为本实施例中用户提交网页阶段的实现流程图。以下分别介绍上述两个阶段。
[0059]阶段一:用户进入页面。如图4所示,包括如下步骤:
[0060]步骤401:用户进入页面。
[0061]步骤402:服务器查询当前页面的Cookie中是否存在当前网页在当前会话中的身份标识,如果没有,则生成当前网页在当前会话中的身份标识,将该身份标识保存入当前页面的Cookie中,将Cookie发送至客户端;如果有,贝1J直接将Cookie发送至客户端。
[0062]步骤403:服务器生成当前网页的Token和TokenName,将上述身份标识与TokenName作为缓存Key,并将Token作为该缓存Key对应的缓存Value进行保存。
[0063]步骤404:服务器将上述Token和TokenName携带在当前网页的信息中,并将当前网页的信息发送至客户端,由客户端展示页面。
[0064]通过本阶段,服务器将当前网页的身份标识、Token和TokenName发送至客户端。之后,客户端在提交网页时,可以将身份标识、Token和TokenName上报至服务器,以便服务器对该客户端进行验证,具体如以下阶段二:
[0065]阶段二:提交网页,如图5所示,包括如下步骤:
[0066]步骤501:用户提交网页,向服务器发送网页数据提交请求。
[0067]步骤502:服务器获取Cookie中的身份标识,判断是否有身份标识,如果有,则继续执行步骤503 ;否则,执行步骤509。
[0068]步骤503:服务器获取网页中的TokenName,判断是否有TokenName,如果有,则继续执行步骤504 ;否则,执行步骤509。
[0069]步骤504:服务器获取网页中的Token,判断是否有Token,如果有,则继续执行步骤505 ;否则,执行步骤509。
[0070]步骤505:服务器将步骤502中获取的身份标识和步骤503中获取的TokenName作为缓存Key,在缓存中查找该缓存Key对应的缓存Value (即Token);如果有,则继续执行步骤506 ;否则,执行步骤509。[0071]步骤506:服务器比较步骤505中查找到的缓存Value (即Token)与步骤504中获取的Token是否一致,如果一致,则继续执行步骤507 ;否则,执行步骤509。
[0072]步骤507:服务器删除上述步骤505中查找到的缓存Key及其对应的缓存Value,如果删除成功,则继续执行步骤508 ;否则,执行步骤509。
[0073]由于重复提交的判断依据为:相同的Token和相同的身份标识同时提交。服务器在处理两次相同的提交请求时,只有第一次才能删除缓存成功;相同的第二次请求则删除失败,从而达到了防止用户重复提交数据的目的。
[0074]步骤508:判定当前请求为正常请求,向客户端反馈数据提交成功消息,继续执行步骤510。
[0075]步骤509:判定当前请求为非法请求,向客户端反馈数据提交失败消息。
[0076]步骤510:客户端根据服务器反馈的数据提交成功/失败消息,跳转至数据提交成功/失败页面。
[0077]本发明还提出一种防止数据重复提交的服务器,如图6为该服务器的结构示意图,包括:
[0078]标识生成模块601,用于生成当前网页对应的身份标识、Token和TokenName,
[0079]标识保存模块602,用于保存所述身份标识与TokenName的组合与Token的对应关系;
[0080]标识发送模块603,用于将所述身份标识、Token和TokenName发送至客户端;[0081 ] 重复提交判断模块604,用于接收来自客户端的网页数据提交请求,从所述网页数据提交请求中获取身份标识、Token和TokenName ;查找所述标识保存模块602中是否保存有该身份标识与TokenName的组合所对应的Token,如果是,则判断所述从网页数据提交请求中获取的Token与查找到的Token是否一致,如果一致,则删除所述查找到的Token及其对应的身份标识与TokenName的组合。
[0082]上述服务器中,标识保存模块602可以置于所述服务器中;也可以是置于网络的缓存服务器中,与服务器通过网络结构连接。
[0083]上述服务器中,标识生成模块601判断所述当前网页的Cookie中是否保存有当前网页对应的身份标识,如果没有,则生成所述当前网页对应的身份标识,并将所述身份标识保存在当前网页的Cookie中。
[0084]标识保存模块602保存身份标识与TokenName的组合与Token的对应关系方式可以为:将身份标识与TokenName作为缓存Key,并将Token作为该缓存Key对应的缓存Value进行保存。
[0085]标识发送模块603将身份标识携带在当前网页的Cookie中,并将当前网页的Cookie发送至客户端;并且,将Token和TokenName携带在当前网页的信息中,并将当前网页的信息发送至客户端。
[0086]重复提交判断模块604还可以用于,当从网页数据提交请求中无法获取到身份标识、Token和TokenName中的任意一个时,向客户端反馈数据提交失败消息。
[0087]重复提交判断模块604还可以用于,当查找到标识保存模块602中没有保存该身份标识与TokenName的组合所对应的Token时,向客户端反馈数据提交失败消息;当判断出从网页数据提交请求中获取的Token与查找到的Token不一致时,向所述客户端反馈数据提交失败消息;
[0088]删除查找到的Token及其对应的身份标识与TokenName的组合之后,可以进一步判断是否删除成功,如果是,则向客户端反馈数据提交成功消息;否则,向客户端反馈数据提交失败消息。
[0089]综上可见,本发明提出的防止数据重复提交的方法和服务器,基于Cookie机制和缓存机制实现防止数据重复提交,将网页的身份标识携带在Cookie中发送至客户端,并将Token和TokenName携带在网页信息中发送至客户端;客户端重复提交的判断依据是:相同的身份标识、Token和TokenName重复提交,服务器处理两次相同的请求时只有第一次删除缓存成功,第二次请求则删除失败,从而达到防止数据重复提交的效果。可见,本发明能够不依赖于Session机制实现防止网页数据的重复提交。
[0090]以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
【权利要求】
1.一种防止数据重复提交的方法,其特征在于,所述方法包括: 生成当前网页对应的身份标识、令牌Token和令牌名TokenName,保存所述身份标识与TokenName的组合与Token的对应关系;将所述身份标识、Token和TokenName发送至客户端; 接收来自客户端的网页数据提交请求,从所述网页数据提交请求中获取身份标识、Token和TokenName ;查找是否保存有该身份标识与TokenName的组合所对应的Token,如果是,则判断所述从网页数据提交请求中获取的Token与查找到的Token是否一致,如果一致,贝1J删除所述查找到的Token及其对应的身份标识与TokenName的组合。
2.根据权利要求1所述的方法,其特征在于,所述生成当前网页的身份标识的方式为: 判断所述当前网页的Cookie中是否保存有当前网页对应的身份标识,如果没有,则生成所述当前网页对应的身份标识,并将所述身份标识保存在当前网页的Cookie中。
3.根据权利要求1所述的方法,其特征在于,保存身份标识与TokenName的组合与Token的对应关系方式为: 将所述身份标识与TokenName作为缓存Key,并将Token作为该缓存Key对应的缓存Value进行保存。
4.根据权利要求1所述的方法,其特征在于,所述将身份标识、Token和TokenName发送至客户端的方式为: 将所述身份标识携带在当前网页的Cookie中,并将所述当前网页的Cookie发送至客户端; 将所述Token和TokenName携带在当前网页的信息中,并将所述当前网页的信息发送至客户端。
5.根据权利要求1所述的方法,其特征在于,所述查找是否保存有该身份标识与TokenName的组合所对应的Token之前进一步包括: 如果从所述网页数据提交请求中无法获取到身份标识、Token和TokenName中的任意一个,则向所述客户端反馈数据提交失败消息。
6.根据权利要求1所述的方法,其特征在于,当查找到没有保存该身份标识与TokenName的组合所对应的Token时,向所述客户端反馈数据提交失败消息; 当判断出从网页数据提交请求中获取的Token与查找到的Token不一致时,向所述客户端反馈数据提交失败消息; 所述删除查找到的Token及其对应的身份标识与TokenName的组合之后进一步包括:判断是否删除成功,如果是,则向所述客户端反馈数据提交成功消息;否则,向所述客户端反馈数据提交失败消息。
7.一种防止数据重复提交的服务器,其特征在于,所述服务器包括: 标识生成模块,用于生成当前网页对应的身份标识、令牌Token和令牌名TokenName, 标识保存模块,用于保存所述身份标识与TokenName的组合与Token的对应关系; 标识发送模块,用于将所述身份标识、Token和TokenName发送至客户端; 重复提交判断模块,用于接收来自客户端的网页数据提交请求,从所述网页数据提交请求中获取身份标识、Token和TokenName ;查找所述标识保存模块中是否保存有该身份标识与TokenName的组合所对应的Token,如果是,则判断所述从网页数据提交请求中获取的Token与查找到的Token是否一致,如果一致,则删除所述查找到的Token及其对应的身份标识与TokenName的组合。
8.根据权利要求7所述的服务器,其特征在于,所述标识生成模块判断所述当前网页的Cookie中是否保存有当前网页对应的身份标识,如果没有,则生成所述当前网页对应的身份标识,并将所述身份标识保存在当前网页的Cookie中。
9.根据权利要求7所述的服务器,其特征在于,标识保存模块保存身份标识与TokenName的组合与Token的对应关系方式为:将所述身份标识与TokenName作为缓存Key,并将Token作为该缓存Key对应的缓存Value进行保存。
10.根据权利要求7所述的服务器,其特征在于,所述标识发送模块将所述身份标识携带在当前网页的Cookie中,并将所述当前网页的Cookie发送至客户端;将所述Token和TokenName携带在当前网页的信息中,并将所述当前网页的信息发送至客户端。
11.根据权利要求7所述的服务器,其特征在于,所述重复提交判断模块还用于,当从所述网页数据提交请求中无法获取到身份标识、Token和TokenName中的任意一个时,向所述客户端反馈数据提交失败消息。
12.根据权利要求7所述的服务器,其特征在于,所述重复提交判断模块还用于,当查找到标识保存模块中没有保存该身份标识与TokenName的组合所对应的Token时,向所述客户端反馈数据提交失败消息;当判断出从网页数据提交请求中获取的Token与查找到的Token不一致时,向所述客户端反馈数据提交失败消息; 所述重复提交判断模块还用于,删除查找到的Token及其对应的身份标识与TokenName的组合之后,进一步判断是否删除成功,如果是,则向所述客户端反馈数据提交成功消息;否则,向所 述客户端反馈数据提交失败消息。
【文档编号】H04L29/08GK103841111SQ201410098056
【公开日】2014年6月4日 申请日期:2014年3月17日 优先权日:2014年3月17日
【发明者】赵天明 申请人:北京京东尚科信息技术有限公司, 北京京东世纪贸易有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1