Спецификация для моего приложения гласит, что два пользователя должны иметь возможность работать с одной и той же записью веб-приложения одновременно, не забивая друг друга данными (если, конечно, каждый из них не изменяет одно и то же поле, это будет последний спасает победы.) Это медицинская система, и вполне возможно, что люди, занимающиеся выставлением счетов, могут работать над записью, пока технический специалист обновляет другой раздел записи.
Таким образом, когда пользователь сохраняет форму, система должна изменять только те значения в базе данных, которые пользователь фактически изменил. Поскольку я использую CakePHP, я пытаюсь разобраться с этим на стороне PHP, а не делаю это с JavaScript перед отправкой данных формы.
Моей первой мыслью было проверить значения в базе данных непосредственно перед сохранением и изменить только те значения, которые не совпадают. Но если пользователь A сохраняет форму после того, как ее открыл пользователь B, а затем пользователь B сохраняет форму, то изменения пользователя A будут заменены старыми данными в форме пользователя B.
Моей следующей мыслью было сохранение значений формы в сеансе пользователя. Таким образом, когда он открывает форму, данные сохраняются в сеансе, и только значения, которые изменились по сравнению с тем, что было в его сеансе, будут обновлены в базе данных. Таким образом, сессия сериализовала бы в нее $ old_data.
Проблема в том, что это может вызвать горе, если пользователь попытается открыть две записи одновременно, а затем сохранить. Итак, мне нужно сохранить данные сеанса под идентификатором записи.
И это подводит меня к последней проблеме. Я могу сбросить данные из сеанса, когда пользователь сохранит форму (и затем сразу же восстановить ее, если они снова отобразят ту же запись). Но это не относится к ситуации, когда пользователь не сохраняет форму. Если они откроют форму и прочитают ее, а затем уйдут, постепенно их сессия будет полна мусора.
Итак, когда наилучшее время и способ для очистки мусора сеанса без удаления данных, которые им действительно нужны в сеансе?