在我的一个项目中,允许用户编辑同一个文件。是小组工作,小组中的最大用户数是4.他们很少同时编辑但是有可能。我正在使用显示内容的ckeditor。如何在编辑内容时锁定内容? 对于上述情况,如果一个用户打开内容进行编辑然后从不保存并保持窗口打开,将会发生什么。是否可以保存内容,释放锁以供其他用户编辑?如果第一个用户回到桌面,他们应该看到“内容已被更改,请刷新”的消息。
我正在使用php,mysql。
由于
答案 0 :(得分:11)
你需要三个部分来完成这项工作。
您需要在数据库中添加一个字段,以指示文件的编辑时间。创建一个名为“LastUsed”的字段,并记录打开文件进行编辑的时间戳。当有人试图打开文件时,检查时间戳,如果时间戳是最近的(例如最后5分钟),则不允许第二个用户打开它。
在允许编辑文件的页面上,每隔几分钟就会运行一次ajax请求。它需要做的就是将正在编辑的文件的时间戳更新为当前日期和时间。
然后,您可以运行一个计时器,一旦达到某个点,ajax请求就会停止,这样数据库中的时间戳就会过期。但是,每次用户执行操作时都会重置计时器。这样,只要用户正在执行某些操作,就会重置计时器,并允许ajax请求继续更新数据库中的时间戳。如果用户在给定时间内没有执行某些操作,则计时器将运行,ajax请求将停止,时间戳将过期,并且其他人可以打开它进行编辑。您也可以使用相同的计时器来显示编辑会话已过期的消息或其他任何内容。
它基本上是这样的:
当用户正在编辑文件时,ajax请求会不断更新“LastUsed”时间戳。
只要该页面处于打开状态以编辑文件,ajax请求将使数据库中的时间戳保持最新。
如果此人离开页面但未执行任何操作,计时器将会启动并停止ajax请求,这将允许其他人编辑该文件。
一旦此人离开页面,ajax请求将无法再更新时间戳。这样,如果一个人离开页面,其他人就可以编辑该文件。
因此,当第二个用户尝试编辑文件时,如果“LastUsed”时间戳在最近5分钟内,则您知道其他人正在编辑该文件。如果时间戳大于5分钟,则表示当前没有人打开文件进行编辑,因此第二个用户可以对其进行编辑。