1

我正在实现一个 CakePHP 2.4 应用程序。

我有UserArticle作为模特。

我没有articles/view行动;只有articles/editarticles/delete actions

当任何人以或User访问articles/edit网页时,该网页将被其他用户锁定,无法编辑/删除。GETPOSTArticle

以下是我需要建议的关键部分。

如果用户保持打开状态articles/edit/23但 30 分钟内没有任何活动,

- 或者 -

当用户离开articles/edit/23页面时,

那么articles/23现在可以由其他用户编辑/删除。

在我的脑海中,我知道在文章表中,我需要一个名为 current_locked_by 字段的字段,该字段包含当前控制的用户的 user_id。

我的问题是检测会话不活动并知道用户已离开编辑页面。

我在编辑页面中定义会话不活动,因为用户没有在任何输入元素中键入任何内容或更改任何下拉选择或选中/取消选中任何复选框

建议?

4

1 回答 1

1

您可以使用用户、资源和锁定时间的组合创建锁定表。(关于您的规范何时开始不活动 - 我建议更简单地开始:“当他们加载页面时”。否则,您还在编写 javascript 以在每次字段更改结束时写入您的数据库。)

每当有人进入编辑页面时,

  1. 他们检查该表的资源和锁定时间。如果记录不存在或已超过锁定时间,则他们可以安全地进行编辑。
  2. 如果他们可以编辑,那么他们会根据需要插入一条记录(并删除该资源的任何记录。)

只要您确保该人在尝试保存更改时仍然有锁(或其他人没有锁定记录),这应该会满足超时要求。

处理页面离开的一种技术是进行 beforeFilter 测试,该测试会删除该人的所有锁。缺点

  • 您仍然无法判断此人是否离开并转到某个外部站点。
  • beforeFilter 确实为每个页面视图增加了开销。
  • 如果您的用户运行两个或更多选项卡,则导航其他选项卡将释放锁定。

您也可以让该页面上的每个出站链接都释放锁定(例如转到插页式页面),并通过关闭选项卡、使用地址栏等超时让任何离开。(这取决于您的用户如何工作。)

于 2013-08-03T16:43:17.433 回答