访问已删除用户的信息


Accessing deleted user's information

我想跟踪用户的信息,即使他们已被从数据库中删除。

我想这样做有两个原因。首先,删除用户后,我想显示一条消息,内容为"已成功删除$name"。其次,我想将已删除用户的名称写入日志文件。

我现在拥有的不起作用,因为当用户从数据库中删除时,名称变为 NULL(我使用的是 $_SESSION 变量)。有没有办法访问这些信息?最聪明的方法是什么?

您在数据库中放置一个额外的字段以表示记录已被"删除",并在尝试使用这些记录的任何地方进行适当的过滤,以便任何"deleted=true"记录都不会显示,例如在登录时:

SELECT ...
FROM users
WHERE (username = '...') AND (password = '...') AND (deleted = FALSE)

这样,您将整个用户记录保留在数据库中,但它不可用,因为它已被标记为已删除。

最聪明的答案是不要删除用户。

在数据库中有一列,用于标记用户已被删除,然后将其视为其余查询中不存在该记录。

如果你想保留用户的"故事"并通过用户名或ID访问它,为什么不添加一个"活动"列,在用户被删除时为"False"?

显然,当您创建用户时,该值将为"True",并且与通用用户相关的每个操作(但如果您很聪明,假设只有登录)都必须考虑该列值

绝对最好的方法是永远不要删除任何数据。

您只需向标记为"is_active"(默认值为 true)或"is_deleted"(默认值为 false)的表添加一个位标志,以指示一段数据是否可以访问。

如果有人想要删除该信息,您可以交换标志值 - 您还确保在该表上执行的任何查询中使用该标志,以仅查找活动数据片段。

如果您只是在寻找一种在删除确认页面上显示其名称的方法,则可以简单地将名称作为 GET 参数传递:

$name = user_get_name($user_id);
user_delete($user_id);
header('Location: deleted.php?user=' . urlencode($name));

然后,在你的deleted.php中,做这样的事情:

echo 'User "' . htmlspecialchars($_GET['user']) . '" has been deleted.';

仅供参考,htmlspecialchars调用是为了使您免受XSS攻击。

更新:确保在第二个脚本中调用session_start(),并且在删除用户或注销用户时不要取消设置会话变量。

喜欢:

$username = $user->get_name(); // OR Copy the object and use the copy for logging and messages
......
$user->delete();
$log->write_log('...... $username....');

附言。请记住,在某些国家/地区删除个人资料后存储用户数据是非法的!

在删除用户之前,您始终可以写入日志文件并显示消息吗?这样,您仍然可以在需要时访问他们的所有信息。

OP 在这里。我最终使用了会话变量(现在可以工作,这是我的愚蠢错误)。我认为这是最简单的方法,因为我只想要已删除的用户的名称。此外,这消除了是否将已删除用户的信息保留在数据库中的困境