【发布时间】:2016-12-04 19:53:54
【问题描述】:
我有一个同时被多个用户使用的 laravel 应用程序,他们都可以在我们的系统中编辑一些项目。
我不希望有 2 个人同时编辑同一个表单。
如果发生这种情况,我想告诉其他用户当前表单已被锁定并且正在由用户名编辑。
如果用户随后离开或提交表单,则该表单将打开以供其他用户使用。
我检查了乐观和悲观锁定,我认为这对我来说不正确
我想做的是在表中创建一个唯一标识符,该标识符正在被编辑,如果页面上的用户具有标识符,我将锁定所有其他标识符,但我怎么知道如果用户关闭浏览器窗口?那么所有其他用户仍然无法访问页面/表单?
你们建议我怎么做?
【问题讨论】:
-
我会创建一个表来保存与表单表相关的临时数据。当用户输入表单 ID 1 时,我会将用户 ID、表单 ID、输入日期和上次修改日期添加到新表中。我会每 2 分钟或其他时间发出一个 ajax 请求,只是为了告诉服务器我仍在处理表单,并更新表格。如果用户在 5 分钟内没有发送任何内容,或者在这段时间内提交表单,我将从数据库中删除该条目。这样,您可以在尝试访问表单时验证是否有人正在处理表单。
-
嗨@PhiterFernandes 你为什么要制作一个临时数据表?我不希望任何人一次编辑一个人,所以我正在考虑为第一个用户在访问页面时创建一个视觉编号,如果用户完成编辑 og 关闭浏览器窗口,我会删除视觉编号.但是我怎么知道用户是否关闭了浏览器窗口?亲切的问候/丹尼
-
CodeIgniter 使用 ci_sessions 表,用于临时存储会话数据。如果它符合您的目的,那么这样做是完全可以的。使用这个额外的表格,您可以控制多个表格。
-
Oki @PhiterFernandes 因此,如果我理解正确,如果临时表中存在具有某些 userID 和 FormID 的行,我将表单锁定给其他用户,你能举个例子,你应该如何删除用户关闭浏览器窗口时的临时行?
-
如果他关闭浏览器窗口,你无法知道。您可以制定例行程序或每 5 分钟运行一次的程序,并验证其中一条记录是否已过期。在最坏的情况下,表格将被锁定 9:59 分钟,没有人使用它。