как предотвратить одновременное редактирование одного и того же контента

Я сделал многопользовательское приложение, в котором, если два пользователя открывают одну и ту же страницу редактирования, и в то же время оба пользователя вводят данные в форме, будут данные о конфликтах, поэтому мне нужно решение, например, если один пользователь откроет конкретную страницу редактирования, а затем все остальные пользовательские блоки в течение некоторого времени и вызывать сообщение им, как «другой пользователь редактирует ту же страницу ….»

Solutions Collecting From Web of "как предотвратить одновременное редактирование одного и того же контента"

Лучший и простой способ сделать это – сохранить живую связь между веб-сайтом и пользователем редактирования после того, как он нажмет на редактирование.

Итак, основные шаги:

1) клики пользователей редактируются.
2) инициировать соединение ajax или websocket с этим пользователем, чтобы сообщить серверу, что файл все еще редактируется
3) если пользователь закрывается вручную или просто покидает веб-сайт, имеет некоторую логику для решения этой проблемы на стороне сервера
4) прибыль.

Постоянный вызов ajax на сервер (например, приложение чата) может обновить столбец «time_last_edited», если этот столбец, скажем, более 10 секунд, файл безопасен для редактирования, иначе это означает, что кто-то все еще его редактирует.

Может быть,

вы можете добавить два столбца в свою базу данных «open» и «time»

Установите «open» на «true» или «false», если кто-то его редактирует. Также установите метку времени в столбце «время». Заменяйте временную метку каждые столько секунд, пока происходит редактирование.

Если кто-то другой откроет его, отметьте столбец «open» и «true», подсчитайте время, прошедшее от столбца «время». Если это закончится через определенное время (скажем, 2 или 3 минуты), предположите, что другой пользователь больше не редактирует и разрешает этому пользователю редактировать.

Чтобы все было ясно,

Опция 1:

  • пользователь нажимает на редактирование
  • проверьте столбец «open», если он «false», установите его «true» и добавьте метку времени в «время»,
  • Пока пользователь вводит вводное поле, каждые 10 секунд или около того происходит вызов AJAX для обновления столбца «время» с текущей меткой времени
  • пользователь щелкает «сохранить», столбец «open» установлен на «false». –

Вариант 2:

  • пользователь нажимает на редактирование
  • проверьте столбец «open», если он «истина» проверяет столбец «время».
  • если разница с текущей меткой времени больше, скажем, 2 – 3 минуты, разрешить редактирование для этого пользователя и обновить временную метку.

Дайте контенту модифицированное время. Перед отправкой нового содержимого проверьте, что время такое же, как и раньше. Если он отличается, содержимое изменилось, и пользователь должен быть проинформирован.

Получается вокруг большинства случаев.

Укажите поле в таблице, например, Page_status, и установите его как заблокированное, если пользователь откроет его для редактирования. и установите его для разблокировки, если редактирование завершено. И каждый раз проверяйте статус, прежде чем разрешать каждому пользователю редактировать.

Если пользователь закрывает страницу без редактирования. затем выполните сеанс для каждого пользователя и установите ограничение по времени, и если сеанс закончится, установите статус для разблокировки.

Для этого вам нужно держать флаг в таблице, если вы имеете имя таблицы «userdetails» с такими столбцами, как имя, мобильный, адрес электронной почты, так что теперь вы добавляете еще два имени столбца

inused with datatype TINYINT со значением по умолчанию 0 inuseddatetime с datatype datetime со значением по умолчанию NULL

Таким образом, как только конкретный пользователь откроет детали для редактирования, обновит inused column до 1 и inuseddatetime столбец с этой датой и временем в currendt

Таким образом, другой пользователь откроет такую ​​же деталь для редактирования, и если столбец имеет значение 1, отобразите приглашение.

Чтобы снова изменить 1 на 0, когда первый пользователь нажал кнопку «Отправить», снова обновить использованный столбец до 0 и inuseddatetime столбец до нуля

В некоторых случаях, если пользователь не нажимает кнопку «Отправить» и не оставляет страницу таким образом, чтобы избежать такого условия, вы можете написать задание cron на сервере, которое будет проверять столбец useduseddatetime и будет обновлять используемый столбец до 0 для столбца, которые являются идеальными с последних 10 минут или 5 минут