首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何设置访问页面的用户数的最大值?

如何设置访问页面的用户数的最大值?
EN

Stack Overflow用户
提问于 2018-10-12 10:00:35
回答 8查看 354关注 0票数 0

我目前正在开发一个具有编辑按钮的应用程序:

我的编辑按钮:

代码语言:javascript
代码运行次数:0
运行
复制
<th title="Edit task" class="edit" style="float: right; $color;">
    <?php
    echo "<a href=edit.php?id=" . $row["id"] . ">
              <i class=material-icons>edit</i>
          </a>";
    ?>      
</th>

我的目标是一次只有一个人可以编辑一篇文章。这有可能吗?如果是的话,我怎么做呢?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2018-10-19 12:37:05

如果您只想禁用按钮以避免并发编辑,那么这是一个糟糕的想法,因为用户总是可以通过直接链接打开编辑页面。实际上,您需要实现并发控制。

您可以实现对记录的锁定以实现并发控制。

例如,可以使用以下简单算法实现并发控制:

  1. 添加将包含锁定到项目的结束时间的param。
  2. 在编辑页面上:如果锁定时间大于当前时间,则将此时间与当前时间进行比较,然后将修改文章的可能性告知用户,否则将编辑页面显示给用户。
  3. 在编辑页面上:如果将文章的编辑页显示给用户,则会增加锁定param的结束时间,例如,递增5分钟。
  4. 如果用户完成了对记录的修改并将其保存,则应重置锁定的结束日期。

但是,您可以实现乐观锁定,而不是这个算法。

乐观锁定允许用户同时打开编辑页面,但它禁止以并行方式保存记录。这是避免对记录进行并行修改的一种更好的方法。

乐观锁定包括接受或拒绝с更改的记录,以依赖记录版本。

它的工作原理如下:每一篇文章都有一个“version”param,其中包含了记录修改的数量。一个用户打开版本等于1的文章的编辑页面,另一个用户同时打开它。他们都保存了同一篇文章。首先,您得到一个记录修改请求,并将存储记录的版本与更新记录的版本进行比较,如果它们相等,那么您应该接受更改,并将更新的记录保存在存储中,并以1的增量增加“version”param,否则,您应该拒绝更改。由于该算法的结果,存储记录的版本将等于2。接下来,您将得到第二个请求并再次比较版本,但是由于存储记录的版本等于2,而从第二个请求中更新的记录版本等于1,因此此更改将被拒绝。当然,您必须将其更改的拒绝通知用户,并使用户能够更新新的记录变体。

票数 2
EN

Stack Overflow用户

发布于 2018-10-22 13:04:39

这就是我在我的申请中所做的:

当用户按下“编辑”按钮时,将时间戳记录在数据库中,并将用户重定向到编辑页面。在编辑页面中,设置一个计时器并将其显示给可以编辑记录的用户,直到计时器用完为止。

例如,根据您的记录,您可以考虑用户编辑记录的时间为2分钟。时间从01:59“开始到00‘:00”。

对于其他用户,单击“编辑”按钮时,应检查其他用户是否正在编辑该记录,您可以通过从登录数据库中计算时间来实现这一点。

如果用户编辑2分钟以下的记录并保存它,您可以删除编辑日志,让其他用户进行编辑。

票数 1
EN

Stack Overflow用户

发布于 2018-10-12 10:42:01

以我的观点来看,这不是完全可能的。

但是试着用下面的方式来做。

您可以在数据库中添加“打开”和“时间”两列

如果有人在编辑,将“打开”设置为“true”或“false”。还将时间戳设置为“time”列。在编辑过程中,每隔几秒钟替换一次时间戳。

如果有人打开它,检查'open‘列和它的'true',计算从' time’列传递的时间。如果超过一定的时间(例如2或3分钟),假设另一个用户不再编辑,并允许该用户进行编辑。

为了说清楚,

您需要添加一个ajax调用,它是在每分钟/秒之后更新时间戳。如果您在编辑页面中。因此,如果有人关闭浏览器,时间戳将不会更新,在下一个用户尝试编辑之后,如果时间戳较旧,则允许编辑该用户。因为我们假设用户关闭了选项卡或浏览器,因此没有更新标志,但时间戳更旧。

这不是完美的解决方案,但你可以试试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52777070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档