我正在开发一个处理多个并发用户的php / mysql应用程序。当涉及到对当前正在查看/编辑的记录进行锁定/警告时,我正在考虑采取的最佳方法。
要避免的场景是两个用户查看记录,一个用户进行更改,然后另一个用户也这样做-其中一个更改可能会覆盖先前的更改。
在最新版本的WordPress中,他们使用了一些方法来检测这一点,但它似乎并不完全可靠-经常返回假阳性,至少在我的经验中是这样。
我假设必须有某种形式的ajax才能'ping‘应用程序,并让它知道记录仍在查看/编辑中(否则,用户可能只是关闭他们的浏览器窗口,然后应用程序如何知道这一点)。
我能看到的另一个解决方案是在提交记录进行更新时检查最后一次更新的时间,看看在此期间它是否在其他地方更新-然后为用户提供继续或放弃他们自己的更改的选择。
也许我在解决方案方面找错了方向--人们在实现这个(必须是相当普遍的)需求时有什么经验?
发布于 2009-03-20 21:32:50
我会这样做:将最后一次修改的时间存储在编辑表单中。将提交时的时间与数据库中存储的时间进行比较。如果它们相同,则锁定该表,更新数据(以及修改时间),然后解锁该表。如果时间不同,请通知用户并询问下一步。
发布于 2009-03-20 21:30:15
发布于 2009-03-20 21:29:22
进行时间戳比较是个好主意。它的实现成本很低,而且在生产环境中运行也是一种成本低廉的操作。您只需编写逻辑将状态消息发送回用户,即他们的写入/更新没有发生,因为有人抢先了他们。
也许可以考虑将每次更新时的用户名存储在名为“LastUpdateBy”的字段中,然后将其返回给抢先更新的用户。对于用户来说,这只是一个小细节。在企业意义上很好,也许不是在一个可能不合适的环境中。
https://stackoverflow.com/questions/668063
复制相似问题