【发布时间】:2011-03-27 19:27:40
【问题描述】:
我的应用程序的规范规定,两个用户必须能够同时处理网络应用程序的同一记录,而不会破坏彼此的数据(当然,除非他们每个人都修改了相同的字段,那么它将是最后一个保存的获胜者。)这是一个医疗系统,可以想象,当技术人员更新记录的另一部分时,计费人员可能正在处理记录。
因此,当用户保存表单时,系统应该只更改用户实际更改的数据库中的值。因为我使用的是 CakePHP,所以我试图在 PHP 方面处理这个问题,而不是在发送表单数据之前使用 JavaScript。
我的第一个想法是在保存之前立即检查数据库中的值,只更改不相同的值。但是,如果用户 A 在用户 B 打开表单后保存了表单,然后用户 B 保存了表单,那么用户 A 的更改将被用户 B 表单中的旧数据覆盖。
我的下一个想法是将表单的值保存在用户会话中。因此,当他打开表单时,数据将存储在会话中,并且只有与会话中的值不同的值才会在数据库中更新。因此,Session 将在其中序列化 $old_data。
这里的问题是,如果用户试图同时打开两条记录然后保存会导致悲伤。所以,我需要通过记录 id 存储会话数据。
而且,这让我想到了最后一个问题。当用户保存表单时,我可以从会话中取消设置数据(如果他们再次呈现相同的记录,则立即重新获取它)。但是,这并不能处理用户不保存表单的情况。如果他们打开表单并阅读它然后离开,他们的会话将逐渐变得充满碎片。
那么,什么时候是清理会话垃圾而不清除会话中实际需要的数据的最佳时间和方法?
【问题讨论】:
-
请注意 - 因为这是一个 Web 应用程序而不是一个网站,所以我们的用户通常整天都在使用该应用程序。因此,如果他们正在处理数十张唱片,事情可能会变得非常疯狂。