现在分2种场景描述:
场景一、刷新页面,form表单内容被重复提交。
解决思路分2部分,前端页面和后端代码。
前端页面:在做from 表单提交的时候不使用原生的FROM html语法提交,定义一个js的function来获取数据进行提交。触发事件后,删除提交按钮上的from方法。
后端代码:防止重复提交。
方式一、代码提交的 Contraller处理完成后跳转到另一个请求的contraller,在新的contraller中跳转到新的页面。
方式二、在登录用户的Session中,放置一个随机数作为同步标记,并在初始化新增或编辑页面时就返回到前台页面中,用隐藏域赋值,当form被提交时,form中的同步标记就和Session中的同步标记作对比。在form首次提交的时候,这两个标记应该是一样的。如果标记不一样,那么该form就会禁止提交,一个错误就会返回给用户。在用户提交一个form时,如果按下浏览器中的后退按钮并尝试重新提交同一个form时,标记就会出现不匹配的现象。
另一方面,如果两个标记值匹配,那么我们就可以确信整个流程是正确的。在这种情况下,Session中的标记值就会被修改为一个新的值,同时允许提交该form。
还可以使用这个策略来控制对某些页面的直接访问,就好象上面资源保护中描述的一样。例如,假设一个用户将某个应用的页面A收藏到收藏夹中,而页面A 只允许通过页面B和C访问。当用户直接通过收藏夹来访问页面A,这时页面的访问顺序就是不正确的,这样同步标记将处在一个不同步的状态,或者它根本就不存在。不论怎样,访问都被禁止了。
场景二、同一个用户登录在不同的浏览器里,打开同一个from表单提交数据。
解决思路:暂时还没想好。谁能提供下解决思路。。。。
相关推荐
总的来说,自定义标签"form-protector"是一种实用且灵活的方法,它通过令牌机制解决了表单重复提交的问题,同时也为开发者提供了更好的可维护性和易用性。在实际开发中,我们可以根据项目需求进行适当的定制和扩展,...
### AJAX 防止按钮重复提交 在Web应用开发中,为了避免用户因网络延迟或误操作而导致的数据重复提交问题,通常会采取一定的措施来确保数据的一致性和完整性。本篇文章将详细探讨如何通过AJAX技术结合JavaScript来...
使用Redis和Spring Boot来防止表单重复提交的基本思路是:在接收到表单提交请求后,生成一个唯一的请求标识(例如,基于UUID),并将其作为键存储到Redis中,设置一个适当的过期时间。当服务器接收到新的请求时,会...
// 清除session中的令牌,防止重复提交 session.removeAttribute("TOKEN_IN_SESSION"); out.print("转出金额:" + money); } else { // 如果令牌无效,返回错误信息或跳转到错误页面 out.print("非法请求,表单...
// 清除令牌,防止重复提交 return "success"; } else { addFieldError("token", "Invalid or duplicate submission"); return INPUT; } } } ``` ### 3. 注意事项 - 令牌需要在每次表单加载时生成并放入...
为解决这一问题,可以通过引入session机制来防止表单重复提交。 解决思路是,在用户提交表单时,生成一个随机数,并将其作为隐藏字段包含在表单中。当服务器接收到表单提交后,首先检查session中是否已经保存了这个...
因此,为了更安全地防止重复提交,还可以结合其他技术,如Token验证、数据库唯一约束等。 此外,还可以考虑使用HTTP的POST-REDIRECT-GET模式(PRG模式),即表单提交后重定向到一个新的页面,这样即使用户刷新页面...
不过,值得注意的是,这种方法只能防止通过客户端发起的重复提交,如果用户在表单提交后通过刷新页面或者重新导航到该页面时再次提交表单,那么还需要通过服务器端的逻辑来进一步控制提交行为,比如生成并验证一次性...
在这篇“form自动提交实例讲解”的文章中,作者详细介绍了如何通过form表单自动提交来简化用户登录流程。该技术主要应用于那些需要同时作为会员和卖家登录的B2B商城平台。当用户拥有会员账号同时又作为卖家需要访问...
这两种方法都能有效地防止用户在服务器处理请求期间重复提交表单,从而减轻服务器的压力。选择哪种方法取决于项目的需求和具体实现。在实际应用中,还可以结合服务器端验证来进一步确保数据的安全性。
- **防止表单重复提交**:通过使用令牌(token)机制来防止用户的重复提交操作。 - **Struts 验证框架**:Struts 提供了一个强大的验证框架,可以在客户端和服务器端对用户输入进行验证,确保数据的有效性和安全性...
在这个例子中,可能会有表单字段用于用户输入QQ号码,`Request.Form("QQNumber")`可以用来获取这个值。 3. **响应输出**:`Response`对象则负责向客户端发送数据。开发者可能使用`Response.Write`来显示反馈信息...
-为按钮增加DisableControlBeforePostBack属性 - 回发之前是否禁用按钮,防止重复提交 - 默认为true。 -Grid的Values属性访问限制由internal改为public,这就意味这可以自由改变Grid中每个单元格的值了。 -增加...
-为按钮增加DisableControlBeforePostBack属性 - 回发之前是否禁用按钮,防止重复提交 - 默认为true。 -Grid的Values属性访问限制由internal改为public,这就意味这可以自由改变Grid中每个单元格的值了。 -增加...
- **表单设置**:确保上传表单设置正确,`enctype`必须设置为`multipart/form-data`。 - **文件验证**:对上传的文件进行验证,例如文件大小、类型等,确保文件符合要求。 - **临时存储**:将文件先存储在服务器临时...
在JSP中,通常会使用表单(form)元素来收集用户输入的信息,并通过后端逻辑进行验证。 - **安全性考虑**:为了保护用户数据安全,需要对传输过程中的数据进行加密处理。同时,服务器端应检查用户名和密码的有效性,...
核心思路是利用cookie来存储用户的登录信息,并在适当的时候从cookie中读取这些信息来自动填充登录表单。实现自动登录时需要考虑到安全性,防止用户信息泄露。此功能在提升用户体验的同时,也需要开发者负责任地考虑...
2. **设置请求头**:包括“Content-Type”(通常设为“application/x-www-form-urlencoded”表示表单数据)和“User-Agent”(表明请求来自何处)等字段。 3. **构造请求数据**:将用户名和密码等信息格式化为“key=...