4

我在不同的网络应用程序中看到了一个功能,包括 Wordpress(不确定?),如果他/她从数据库中打开一篇文章/帖子/页面/任何内容,而其他人正在同时编辑相同的数据,它会警告用户。

我想在我自己的应用程序中实现相同的功能,我对此进行了一些思考。以下示例是如何执行此操作的好习惯吗?

它有点像这样:

1)User A进入神秘文章X的编辑页面。Events查询数据库表以确保当前没有其他人在编辑同一页面,此时没有人。然后随机生成一个令牌并将其插入一个名为 的数据库表中Events

1)User B还想对文章X进行更新。现在由于我们User A已经在编辑文章,因此Events查询表格如下所示:

|   timestamp   |   owner   |   Origin      |   token      |
------------------------------------------------------------
|   1273226321  |   User A  |   article-x   | uniqueid##   |

2) 正在检查时间戳。如果它有效并且不到 100 秒,则会出现一条消息,并且用户无法对请求的文章 X 进行任何更改:

Warning: User A is currently working with this article. In the meantime, editing cannot be done. Please do something else with your life.

3) 如果用户 A 决定继续并保存他的更改,则令牌与所有其他数据一起发布以更新数据库,并切换查询以删除带有令牌的行uniqueid##。如果他决定做其他事情而不是提交他的更改,文章 X 仍将在 100 秒内可供编辑User B

让我知道您对这种方法的看法!

祝大家周末愉快!

4

4 回答 4

3

是的,这很棒,应该可以正常工作。

此外,我会增加用户 B 打破锁定的可能性——如果这完全需要的话!

也就是说,用 B 的锁替换 A 的锁的可能性。这样,你可以避免时间限制,他们会看到‘嘿,这是 A 正在编辑的,这个锁是 XXX 秒/分钟旧的。你想打破这把锁吗?

对于优秀的用户(即没有恶意管理员),这种方法可能比只有 100 秒的时间来编辑内容要好——有时您只需要更多的时间。

于 2010-05-07T22:23:26.477 回答
2

听起来它会正常工作。如果您想对其进行非规范化并删除额外的Events表,只需在表中添加一个UserIdandTimestamp字段Articles,因为这就是您真正需要的。

您可以轻松地检查 是否UserId不匹配以及是否Timestamp小于 100 秒,然后显示该消息。

这样,您就不必在单独的表上进行任何删除。

于 2010-05-07T22:23:32.117 回答
2

我只想补充一点,如果在页面上执行了更新时间戳的操作,您可以每分钟左右触发一次 AJAX 查询。

于 2010-05-08T00:49:41.137 回答
0

编辑一篇文章总是不到 100 秒吗?

于 2010-05-08T11:45:20.900 回答