检测重复插入(detect duplicate insert)

2019-10-18 04:02发布

是否有防止刷新后重复插入一个简单的方法? 我现在做的方式是选择与除ID的所有字段作为参数一切; 如果记录存在,我不插入。 有没有一种办法可以检测刷新?

Answer 1:

我想你可能要EXISTS的功能。 这里有一个简单的解释EXISTS我通过谷歌找到。



Answer 2:

假设这是一个数据库,你可以穿上“除ID的所有字段”的组合,唯一约束,赶上上插入或更新除外。



Answer 3:

我同意@Austin萨洛宁,你应该通过保护与DB主键,唯一约束和外键启动。

上述工作完成后,许多网站将包括一些JS背后的提交按钮立即发送的请求之前禁用按钮。 这样一来,谁双击用户不发送两个请求。



Answer 4:

就像Dereleased说,使用基于303重定向。 使表单提交使用POST并保存有后发303头,并将其通过Location头将通过GET来读取和刷新不会重新发布数据发送到提交之后的URL。



Answer 5:

这是一个很长的时间,因为我做了任何真正的Web工作。 但是,早在1.1天,我记得使用带有回传相关联的ID,以确定是否有刷新了发生。

快速搜索后,我觉得这是我根据我的解决方案从文章:

http://msdn.microsoft.com/en-us/library/ms379557(VS.80).aspx

基本上,它展示了如何建立一个新的页面类,你可以继承。 基类将暴露你的时候,你正在做的事情是不应该在刷新重复调用的方法,以及IsPageRefresh的方法来跟踪,如果刷新已发生。

那篇文章是为有类似目标的变化,很多的基础,所以它应该是一个良好的开端。 不幸的是我不记得有足够的了解它是如何去真正给予更多的帮助。



Answer 6:

我第二请求提交后(插入到数据库中的记录)的选项将用户重定向到另一个(确认)页面。 这样,他们将无法执行刷新。

你也可以有一个标志,指示插入请求是否已经提交,它要么存放的页面(使用JavaScript),或在会议上。 您还可以更进一步,它保存在别处,但是这是在你的web应用程序的一部分的架构决策。

如果您使用的是AJAX请求中插入一条记录,然后这是一个有点很难防止这种在客户端。

我宁愿做那么指示器/标志比较的字段。 这当然取决于你的记录。 例如,如果它是一个简单的商店,用户想要作出相同的顺序,那么你就会把它作为一个重复的秩序,有效防止功能。



Answer 7:

您正在使用什么数据库? 如果它的MySQL,以及实现对齐的某些其他因素,你总是可以使用INSERT IGNORE INTO ... 编辑:施特鲁克为SQL Server

或者,你可以创建“处理程序”页面,比如你的进程是这样​​的:

  1. 用户试图执行“行动”
  2. 用户被发送到“doAction.xxx”
  3. “doAction.xxx”完成,并重定向到“actionDone.xxx”
  4. ???
  5. 利润!

编辑:在重新阅读你的问题后,我会更倾向于第二种方案; 通过重定向创建一个中间页(通常是一个HTTP / 1.1 303查看其它 ),你通常可以防止这样的困惑。 在数据库上的唯一身份检查是一个好主意,但对于不想刷新重复上一个动作的简单情况,这是一个优雅和成熟的解决方案。



文章来源: detect duplicate insert