网页中多人编辑同一界面的同个人员的信息,怎么防止重复提交啊

jojoova 2017-03-20 03:05:55
前面的人在编辑中,后面的人在打开这个页面也编辑该人员的信息,提交后会把后面的人就把前面的提交的给覆盖掉了,这种情况该怎么处理?是不是要加锁啊,表示没处理过类似,该怎么处理啊
...全文
1098 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
ying1234 2017-03-24
  • 打赏
  • 举报
回复
这种问题应该在业务设计上去避免,而不应该在技术上去钻牛角尖。
小灰狼 2017-03-23
  • 打赏
  • 举报
回复
引用 31 楼 zbdzjx 的回复:
[quote=引用 27 楼 hemowolf 的回复:] [quote=引用 13 楼 sp1234 的回复:] [quote=引用 11 楼 zbdzjx 的回复:] 有些情况下还是要限制的。之前发生过的类似这样的事件:我先建一张请假单,4个小时,保存完后,再点修改,修改界面留在那里不动。再跟经理说,我建了张请假单。经理一看,4个小时,就点了批准。然后,我再到修改界面,将请假时数改成6小时,再点保存,就成功了。
这个很简单! 只要发一个公司规定:一旦查出来有这种操作的人,扣1000块钱,或者开除,就行了。至于能不能从随时系统上查出来这种行为,公司经理会不会要求某个技术人员在某一天去编写一个小程序来打印这种报表,你认为能还是不能发生这种事儿呢? 而并没有必要去以为所有的公司经理都是傻子啊。[/quote] 这个规定不合理的,如果系统允许修改,就是合理的,因为请假的人不一定就是在钻这个空子 正确的做法应该是,申请一旦提交,就流动到下一个管理人的环节,申请人不能再修改,只能由审批人审批通过或者退回;只有审批人退回之后才能由编辑人重新编辑;如果你的请假时间没有确定,可以存为“草稿”。 这也是大多数的OA类软件普遍使用的做法。[/quote] 我说的这种问题,在WinForm上更容易出现,而网站这种,则不太容易出现,像CSDN这样的网站,基本上不会出现,因为大多数人只有新增权限,没有修改及删除权限。 OA系统也要看代码具体的写法了。不知你们公司有没有在用OA,是否可以一个账号在多台电脑上登录。如果有OA,且一个账号可以在多台电脑上登录,可以试试:新建一张请假单,保存到草稿,然后进入草稿箱,看到这个草稿。再在另一台电脑上用你的账号登录,也进入草稿箱,应该也能看到这个草稿。两台电脑上都点编辑,应该都能进入修改界面。然后,一台电脑点提交,应该能正常提交出去,另一台电脑,修改一下内容,再点保存到草稿(或是提交,都可以试试),如果代码写的不够强,就会发现,已经提交的单子,被修改了。如果结构、代码写的简单,你可以在草稿箱里点删除,在提示是否要删除时,另一台电脑提交,这台电脑上再点是,单子可能就被删除了。因为一般情况下,都是在点删除时,先判断各种可能,都没问题了,再提示要删除,当点“是”了,就不会再判断什么了,就是一条删除语句。[/quote] 你说的这个漏洞其实可以避免的,就看做OA的人是否用心
足球中国 2017-03-22
  • 打赏
  • 举报
回复
.net dataset更新数据库的时候,本身就相当好。可能很我人不知道或者不会用。 System.Data.SqlClient .SqlCommandBuilder 更新到数据库的时候,只要有一个值被改变,则更新失败。微软在开发.net时就已经替你考虑好了。
小灰狼 2017-03-22
  • 打赏
  • 举报
回复
引用 13 楼 sp1234 的回复:
[quote=引用 11 楼 zbdzjx 的回复:] 有些情况下还是要限制的。之前发生过的类似这样的事件:我先建一张请假单,4个小时,保存完后,再点修改,修改界面留在那里不动。再跟经理说,我建了张请假单。经理一看,4个小时,就点了批准。然后,我再到修改界面,将请假时数改成6小时,再点保存,就成功了。
这个很简单! 只要发一个公司规定:一旦查出来有这种操作的人,扣1000块钱,或者开除,就行了。至于能不能从随时系统上查出来这种行为,公司经理会不会要求某个技术人员在某一天去编写一个小程序来打印这种报表,你认为能还是不能发生这种事儿呢? 而并没有必要去以为所有的公司经理都是傻子啊。[/quote] 这个规定不合理的,如果系统允许修改,就是合理的,因为请假的人不一定就是在钻这个空子 正确的做法应该是,申请一旦提交,就流动到下一个管理人的环节,申请人不能再修改,只能由审批人审批通过或者退回;只有审批人退回之后才能由编辑人重新编辑;如果你的请假时间没有确定,可以存为“草稿”。 这也是大多数的OA类软件普遍使用的做法。
cloudmissing 2017-03-22
  • 打赏
  • 举报
回复
引用 17 楼 zbdzjx 的回复:
像我们公司用的ERP是鼎新的TIPTOP,新版的不了解,我们用的版本,如果这条记录有人点了修改,其他人就只能看,不能修改、删除。 只有点了保存,其他人才能点修改或删除。 如果在修改的状态中,电脑死机或是重启,那就等吧,半小时后才会自动解锁。(也可由管理员人工去解锁。)
是的,有些ERP是这样处理的。 但这样就有你刚才说的问题,如果有个人点了修改,然后突然接电话走开了, 或者被领导叫去了, 离开很长时间,那数据就会被一只锁定着。其他人都无修改 现在我们开发的ERP,是用最后修改时间(精确到毫秒)来判断。就像一L说的时间戳吧。 提交的时候,判断下 获取到的 最后修改时间 和 当前这条记录的 最后修改时间是否一致, 如果不一样,就不能提交。 这样也有问题,比如某人改了半天,提交时,发现无法提交,白忙了。又得重新打开编辑 各有各的利弊。
正怒月神 版主 2017-03-22
  • 打赏
  • 举报
回复
一般这种情况不用加锁。 记录最后操作人。 如果数据比较重要,可以记录2个人的操作记录进备份表。
jojoova 2017-03-22
  • 打赏
  • 举报
回复
没想到我小小一个帖子引来各位大佬回帖,感谢!我考虑在业务逻辑上控制下,尽量不影响用户操作
snowguest 2017-03-22
  • 打赏
  • 举报
回复
引用 15 楼 sp1234_maJia 的回复:
[quote=引用 楼主 jojoova 的回复:] 前面的人在编辑中,后面的人在打开这个页面也编辑该人员的信息,提交后会把后面的人就把前面的提交的给覆盖掉了,这种情况该怎么处理?是不是要加锁啊,表示没处理过类似,该怎么处理啊
进行软件设计,永远应该反对“过分技术化”的毛病。 你比如说你为了技术,硬要让大超市的收银机,在一个机器给顾客结账时,别的100多台机器不能给顾客结账,你得“有多任性”才能坚持这比用户体验更重要啊?解决它的办法就是让业务逻辑上完全能够并发、独立地去提交结账信息。 比如说你讲一个请假单置成修改界面,然后4小时之后让经理批准,然后你再来将前面的修改界面“提交”,而这个提交程序竟然不去判断数据库里的数据是不是已经是批准状态了,这说明这个公司的程序得有多么缺乏“测试”啊?解决它的办法就是再提交之前增加一个判断规则就行了,而并不是加锁。 实际上所有的东西都不可能处于绝对洁癖状态,只应该追求“恰好合适、与时俱进、重新认识”。[/quote] 说的好,应该思考学习, 我说下我们公司软件这方面的问题是怎么处理。 如果是重新编,两个人去编缉,有编缉字段记录。 如果是审核后,钻空子不关介面去保存编缉,系统会提示单据已审核,不能进行编缉。因为表单里有个字段已经把审核人ID写进去了。
zbdzjx 2017-03-22
  • 打赏
  • 举报
回复
引用 32 楼 cloudmissing 的回复:
[quote=引用 31 楼 zbdzjx 的回复:] [quote=引用 27 楼 hemowolf 的回复:] [quote=引用 13 楼 sp1234 的回复:] [quote=引用 11 楼 zbdzjx 的回复:] 有些情况下还是要限制的。之前发生过的类似这样的事件:我先建一张请假单,4个小时,保存完后,再点修改,修改界面留在那里不动。再跟经理说,我建了张请假单。经理一看,4个小时,就点了批准。然后,我再到修改界面,将请假时数改成6小时,再点保存,就成功了。
这个很简单! 只要发一个公司规定:一旦查出来有这种操作的人,扣1000块钱,或者开除,就行了。至于能不能从随时系统上查出来这种行为,公司经理会不会要求某个技术人员在某一天去编写一个小程序来打印这种报表,你认为能还是不能发生这种事儿呢? 而并没有必要去以为所有的公司经理都是傻子啊。[/quote] 这个规定不合理的,如果系统允许修改,就是合理的,因为请假的人不一定就是在钻这个空子 正确的做法应该是,申请一旦提交,就流动到下一个管理人的环节,申请人不能再修改,只能由审批人审批通过或者退回;只有审批人退回之后才能由编辑人重新编辑;如果你的请假时间没有确定,可以存为“草稿”。 这也是大多数的OA类软件普遍使用的做法。[/quote] 我说的这种问题,在WinForm上更容易出现,而网站这种,则不太容易出现,像CSDN这样的网站,基本上不会出现,因为大多数人只有新增权限,没有修改及删除权限。 OA系统也要看代码具体的写法了。不知你们公司有没有在用OA,是否可以一个账号在多台电脑上登录。如果有OA,且一个账号可以在多台电脑上登录,可以试试:新建一张请假单,保存到草稿,然后进入草稿箱,看到这个草稿。再在另一台电脑上用你的账号登录,也进入草稿箱,应该也能看到这个草稿。两台电脑上都点编辑,应该都能进入修改界面。然后,一台电脑点提交,应该能正常提交出去,另一台电脑,修改一下内容,再点保存到草稿(或是提交,都可以试试),如果代码写的不够强,就会发现,已经提交的单子,被修改了。如果结构、代码写的简单,你可以在草稿箱里点删除,在提示是否要删除时,另一台电脑提交,这台电脑上再点是,单子可能就被删除了。因为一般情况下,都是在点删除时,先判断各种可能,都没问题了,再提示要删除,当点“是”了,就不会再判断什么了,就是一条删除语句。[/quote] 这个是更新或删除时,没判断单据的状态吧。 Where条件中要加单据状态的限制 或者在更新前,要加状态的检查[/quote] 这就是要看逻辑、经验及各方面的管理,才能保证程序的健壮。已经发现的问题,基本上都不是问题了,就怕的是那些没发现的问题。
cloudmissing 2017-03-22
  • 打赏
  • 举报
回复
引用 31 楼 zbdzjx 的回复:
[quote=引用 27 楼 hemowolf 的回复:] [quote=引用 13 楼 sp1234 的回复:] [quote=引用 11 楼 zbdzjx 的回复:] 有些情况下还是要限制的。之前发生过的类似这样的事件:我先建一张请假单,4个小时,保存完后,再点修改,修改界面留在那里不动。再跟经理说,我建了张请假单。经理一看,4个小时,就点了批准。然后,我再到修改界面,将请假时数改成6小时,再点保存,就成功了。
这个很简单! 只要发一个公司规定:一旦查出来有这种操作的人,扣1000块钱,或者开除,就行了。至于能不能从随时系统上查出来这种行为,公司经理会不会要求某个技术人员在某一天去编写一个小程序来打印这种报表,你认为能还是不能发生这种事儿呢? 而并没有必要去以为所有的公司经理都是傻子啊。[/quote] 这个规定不合理的,如果系统允许修改,就是合理的,因为请假的人不一定就是在钻这个空子 正确的做法应该是,申请一旦提交,就流动到下一个管理人的环节,申请人不能再修改,只能由审批人审批通过或者退回;只有审批人退回之后才能由编辑人重新编辑;如果你的请假时间没有确定,可以存为“草稿”。 这也是大多数的OA类软件普遍使用的做法。[/quote] 我说的这种问题,在WinForm上更容易出现,而网站这种,则不太容易出现,像CSDN这样的网站,基本上不会出现,因为大多数人只有新增权限,没有修改及删除权限。 OA系统也要看代码具体的写法了。不知你们公司有没有在用OA,是否可以一个账号在多台电脑上登录。如果有OA,且一个账号可以在多台电脑上登录,可以试试:新建一张请假单,保存到草稿,然后进入草稿箱,看到这个草稿。再在另一台电脑上用你的账号登录,也进入草稿箱,应该也能看到这个草稿。两台电脑上都点编辑,应该都能进入修改界面。然后,一台电脑点提交,应该能正常提交出去,另一台电脑,修改一下内容,再点保存到草稿(或是提交,都可以试试),如果代码写的不够强,就会发现,已经提交的单子,被修改了。如果结构、代码写的简单,你可以在草稿箱里点删除,在提示是否要删除时,另一台电脑提交,这台电脑上再点是,单子可能就被删除了。因为一般情况下,都是在点删除时,先判断各种可能,都没问题了,再提示要删除,当点“是”了,就不会再判断什么了,就是一条删除语句。[/quote] 这个是更新或删除时,没判断单据的状态吧。 Where条件中要加单据状态的限制 或者在更新前,要加状态的检查
zbdzjx 2017-03-22
  • 打赏
  • 举报
回复
引用 27 楼 hemowolf 的回复:
[quote=引用 13 楼 sp1234 的回复:] [quote=引用 11 楼 zbdzjx 的回复:] 有些情况下还是要限制的。之前发生过的类似这样的事件:我先建一张请假单,4个小时,保存完后,再点修改,修改界面留在那里不动。再跟经理说,我建了张请假单。经理一看,4个小时,就点了批准。然后,我再到修改界面,将请假时数改成6小时,再点保存,就成功了。
这个很简单! 只要发一个公司规定:一旦查出来有这种操作的人,扣1000块钱,或者开除,就行了。至于能不能从随时系统上查出来这种行为,公司经理会不会要求某个技术人员在某一天去编写一个小程序来打印这种报表,你认为能还是不能发生这种事儿呢? 而并没有必要去以为所有的公司经理都是傻子啊。[/quote] 这个规定不合理的,如果系统允许修改,就是合理的,因为请假的人不一定就是在钻这个空子 正确的做法应该是,申请一旦提交,就流动到下一个管理人的环节,申请人不能再修改,只能由审批人审批通过或者退回;只有审批人退回之后才能由编辑人重新编辑;如果你的请假时间没有确定,可以存为“草稿”。 这也是大多数的OA类软件普遍使用的做法。[/quote] 我说的这种问题,在WinForm上更容易出现,而网站这种,则不太容易出现,像CSDN这样的网站,基本上不会出现,因为大多数人只有新增权限,没有修改及删除权限。 OA系统也要看代码具体的写法了。不知你们公司有没有在用OA,是否可以一个账号在多台电脑上登录。如果有OA,且一个账号可以在多台电脑上登录,可以试试:新建一张请假单,保存到草稿,然后进入草稿箱,看到这个草稿。再在另一台电脑上用你的账号登录,也进入草稿箱,应该也能看到这个草稿。两台电脑上都点编辑,应该都能进入修改界面。然后,一台电脑点提交,应该能正常提交出去,另一台电脑,修改一下内容,再点保存到草稿(或是提交,都可以试试),如果代码写的不够强,就会发现,已经提交的单子,被修改了。如果结构、代码写的简单,你可以在草稿箱里点删除,在提示是否要删除时,另一台电脑提交,这台电脑上再点是,单子可能就被删除了。因为一般情况下,都是在点删除时,先判断各种可能,都没问题了,再提示要删除,当点“是”了,就不会再判断什么了,就是一条删除语句。
zbdzjx 2017-03-22
  • 打赏
  • 举报
回复
引用 27 楼 hemowolf 的回复:
[quote=引用 13 楼 sp1234 的回复:] [quote=引用 11 楼 zbdzjx 的回复:] 有些情况下还是要限制的。之前发生过的类似这样的事件:我先建一张请假单,4个小时,保存完后,再点修改,修改界面留在那里不动。再跟经理说,我建了张请假单。经理一看,4个小时,就点了批准。然后,我再到修改界面,将请假时数改成6小时,再点保存,就成功了。
这个很简单! 只要发一个公司规定:一旦查出来有这种操作的人,扣1000块钱,或者开除,就行了。至于能不能从随时系统上查出来这种行为,公司经理会不会要求某个技术人员在某一天去编写一个小程序来打印这种报表,你认为能还是不能发生这种事儿呢? 而并没有必要去以为所有的公司经理都是傻子啊。[/quote] 这个规定不合理的,如果系统允许修改,就是合理的,因为请假的人不一定就是在钻这个空子 正确的做法应该是,申请一旦提交,就流动到下一个管理人的环节,申请人不能再修改,只能由审批人审批通过或者退回;只有审批人退回之后才能由编辑人重新编辑;如果你的请假时间没有确定,可以存为“草稿”。 这也是大多数的OA类软件普遍使用的做法。[/quote] 我之前遇到的,就是在钻这个空子。这是操作人员告诉我的,有这个漏洞。而且还说了,还有一个更隐蔽的漏洞,但没告诉我。 上个月给另一家写的程序,也告诉了我一个漏洞,通过网络的断开和连接,能够绕开程序的登录,获取最高权限。然后我就再加上一堆的防范,但这还不敢保证会不会有其他漏洞。
zbdzjx 2017-03-22
  • 打赏
  • 举报
回复
引用 28 楼 zanfeng 的回复:
.net dataset更新数据库的时候,本身就相当好。可能很我人不知道或者不会用。 System.Data.SqlClient .SqlCommandBuilder 更新到数据库的时候,只要有一个值被改变,则更新失败。微软在开发.net时就已经替你考虑好了。
之前在用Delphi时,用数据绑定控件,Delphi就会帮着处理,当有一列改变了,保存不了。 但另一个方法,就是主从表,从表点新建,然后找经理签核,主档审核了,从表在新建界面,还是可以保存的。因为在从表保存时,没有再次验证主表有没有审核。 去年看一家公司给的源代码,用的是asp.net的多层架构(bll、model、dal的那个),在保存时,就是用主键一个条件去更新,也是没有判断其他字段有没有变、有没有审核。
lili20090907 2017-03-21
  • 打赏
  • 举报
回复
引用 3 楼 peng2739956 的回复:
1L 没错,这是最普遍的做法, 根据时间戳来判断, 提交的时候会有一个时间戳。我之前做过这样一个东西,但是对于大并发时间戳完全不管用,后面用了锁,在到后面用了单点登录
这个
堂风 2017-03-21
  • 打赏
  • 举报
回复
这就是SVN嘛
wanghui0380 2017-03-21
  • 打赏
  • 举报
回复
罚款、开除就已经没意义了。依然是程序员的思维。 为啥没意义?当然有意义,这是决策。根据当时情况的决策。 会计做错账了,就应该进入数据库把那笔帐划掉么?不会,会计只会用红笔记录,这条账需要冲销,并记录冲销的原因。
wanghui0380 2017-03-21
  • 打赏
  • 举报
回复
至于你说的后一种模式,其实也不是技术问题。依然是逻辑策略问题。 不说别的,你的代码版本控制工具,就有vss和svn两种典型策略。vss是独占模式(一人修改,其他人都只是副本,他不提交,没人能提交),svn共享模式(大家都能修改,不过冲突提示,自己解决)
wanghui0380 2017-03-21
  • 打赏
  • 举报
回复
就你这个问题,不是并发,而是逻辑不完备。 完备的逻辑是,工作流没有进入下级任务以前都可以修改,工作流流转到下级以后不允许修改。(你可以申请补充说明,而不是直接修改) 实际工作其实也是这样,你合同都签署了,能反悔么?不能!只能在签变更和备忘,谅解,而不是直接在原合同上用涂改液修改
风吹蛋蛋飘~ 2017-03-21
  • 打赏
  • 举报
回复
如果是sql已经帮你加锁了,没事。又不是同时写同一个文件才考虑文件并发问题,要加锁,使用队列模式
zbdzjx 2017-03-20
  • 打赏
  • 举报
回复
像我们公司用的ERP是鼎新的TIPTOP,新版的不了解,我们用的版本,如果这条记录有人点了修改,其他人就只能看,不能修改、删除。 只有点了保存,其他人才能点修改或删除。 如果在修改的状态中,电脑死机或是重启,那就等吧,半小时后才会自动解锁。(也可由管理员人工去解锁。)
加载更多回复(16)

62,266

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧