我正在开发一个用户管理器,它必须控制对可编辑项目的详细信息视图的访问。目前,当用户点击“编辑”时,应用程序查询链接表以检查用户当前是否正在编辑该页面,如果没有,则允许访问该页面然后将记录插入到链接表中以防止其他用户同时编辑同一页面。
我的问题是,如果用户存在浏览器而不保存等,则处理删除记录的最佳方法是什么,因此无法删除记录。
我有几个想法,但在我决定之前想要其他输入。
BenTheDesigner
答案 0 :(得分:1)
简单的超时。在表中有一个字段last_seen
,并在用户执行操作时使用当前时间进行更新。然后,您可以检查last_seen
字段是否超过15分钟左右,删除记录。
一些伪代码:
edit_something() {
// Assume there's a lock
$is_editable = false;
// Check if lock exists
$q = mysql_query("SELECT * FROM linktable WHERE item_id = 2");
// If a lock exists
if(mysql_num_rows($q) > 0) {
// Check if it's timed out
$r = mysql_fetch_assoc($q);
// Delete lock if it's over 15 minutes old
if(time() - $r > 15 * 60) {
mysql_query("DELETE FROM linktable WHERE item_id = 2");
$is_editable = true;
}
} else {
$is_editable = true;
}
if($is_editable) {
// Lock for current user
mysql_query("INSERT INTO linktable SET item_id = 2, user_id = 5, last_seen = NOW()");
} else {
echo "Sorry, it's locked.";
}
}