4

他の誰かが同じデータを同時に編集しているときに、データベースから記事/投稿/ページ/何かを開いた場合にユーザーに警告する機能を、Wordpress を含むさまざまな Web アプリケーションで見たことがあります (わかりませんか?)。

自分のアプリケーションに同じ機能を実装したいと考えており、これについて少し考えてみました。次の例は、これを行う方法の良い方法ですか?

次のようになります。

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 が続行して変更を保存することを決定した場合、トークンはデータベースを更新するために他のすべてのデータと共にポストされ、クエリを切り替えて token で行を削除しますuniqueid##。彼が変更をコミットする代わりに何か他のことをすることにした場合でも、記事 X は 100 秒間編集できます。User B

このアプローチについてどう思うか教えてください!

素晴らしい週末をお過ごしください。

4

4 に答える 4

3

ええ、それは素晴らしいことです。うまくいくはずです。

さらに、ユーザー B がロックを解除できる可能性を追加します。

つまり、A のロックを B のロックに置き換える可能性です。このようにして、時間の制約を回避でき、「ねえ、これは A によって編集されています。このロックは XXX 秒/分前のものです。このロックを解除しますか?'.

善良なユーザー (つまり、悪意のある管理者がいない) の場合、このアプローチは、何かを編集するのに 100 秒しかない場合よりも優れている場合があります。

于 2010-05-07T22:23:26.477 に答える
2

タイムスタンプを更新するためにページで何かが行われた場合、AJAXクエリを1分ごとに起動させることができることを付け加えておきます。

于 2010-05-08T00:49:41.137 に答える
2

うまくいきそうです。これを非正規化して余分なテーブルを削除したい場合は、テーブルにandフィールドをEvents追加するだけで十分です。UserIdTimestampArticles

UserIdが一致しないかどうか、およびTimestampが 100 秒以内に経過したかどうかを簡単に確認してから、メッセージを表示できます。

これにより、別のテーブルで削除を行う必要がなくなります。

于 2010-05-07T22:23:32.117 に答える
0

記事の編集には常に100秒もかかりませんか?

于 2010-05-08T11:45:20.900 に答える