我有一个页面,其中包含用于编辑某些数据的控件。我想让这个数据只能由一个用户编辑。用户可以查看内容,但如果其他用户打开此页面,则无法编辑内容,因此编辑的优先级将发送给打开该页面的第一个用户。我需要有关如何实现这一点的建议。 如果这很重要,Web服务器就是nginx。
答案 0 :(得分:1)
我会这样做:
Make DB table --> create field at table [data_name lock];
User goes to edit page --> lock = 1;
User finish editing stuff --> lock = 0;
当其他用户尝试登录时:
Test lock value --> if it`s 1 refuse enter, else it`s open to edit/view
and so on.
答案 1 :(得分:1)
我猜您将数据保存在数据库中。您可以添加包含允许编辑它的用户的ID的列(例如“last_author”),默认值为0.
当某个用户打开页面时,您可以将其ID设置为“last_author”,并在用户退出页面时将其切换回0.
当您加载页面时,您只需要检查给定用户是否与登录的用户匹配,或者如果它是0,则第一个用户将获得编辑权限。
通过这种方式,您将知道当前正在编辑该页面的人。
注意:您需要设置某种类型的cron作业或检查页面打开的日期,以确保某些用户不会在没有允许您将“last_author”设置为“last_author”的常规退出的情况下关闭其浏览器0
答案 2 :(得分:1)
如果将活动会话保存到数据库中,问题可能是用户关闭浏览器而不断开会话,会话仍保存在数据库中。因此,您需要限制会话在服务器端的时间。从客户端(如AJAX),总是告诉服务器该客户端是否仍在编辑。因此,如果第一个用户会话已过期但仍在编辑,则不会出现第二个用户的中断。
答案 3 :(得分:0)
您需要会话,还有一个系统来跟踪文件是否打开,还有一个系统来跟踪文件是否已关闭"。
例如,当User1访问该文件时,您在数据库中写入user1打开file1。因此,下次用户想要打开同一个文件时,如果存在FileId和UserId的行,则检查数据库。如果是,则拒绝访问User2。但是你还需要检查User1是否仍然登录,否则,如果他关闭了他的浏览器,该行仍将在数据库中,除了他之外,没有人能够编辑该文件。此时,您需要检查User1的会话是否仍处于活动状态。如果没有,则从数据库中删除该条目并授予对User2的访问权。