如何在 PHP / MySQL 中禁用用户帐户

How to disable a user's account in PHP / MySQL

我的网站需要能够 "disable" 或 "de-activate" 用户的帐户(当然是根据用户的要求)。实际上,我在我的网站中放置的link是完全删除该帐户。

但是,根据经验,我知道永远不要从数据库中完全删除用户帐户是一种很好的做法。最好以某种方式简单地禁用它,这样用户就不能再登录了。但是,出于各种显而易见的原因,帐户本身应该保留在数据库档案中。

而且,这就是我的困境。我知道如何使用我的 PHP 代码删除帐户(只需要一个简单的 MySQL DELETE 查询)。这很简单。

但是,我不知道如何在 MySQL 数据库中 disable/deactivate 一个帐户,这样用户就无法再登录到我的网站。广泛的在线搜索一无所获。

我唯一能找到的是:REVOKE PRIVILEGES for user "login" 等等

但是,当这不起作用时,我并不感到惊讶。它只是服务器端。无法撤销最初从未授予的特权。

知道 disable/de-activate PHP 中的用户帐户需要什么样的代码吗?

所以首先,在您的登录 table 中添加一行 "activated"(我现在称之为 "login")。

"Delete"一个账号(或者直接禁用)

是这样的吗?我不知道你是否使用 id。我会推荐它。

<?php

$userid = $_SESSION["userid"]; // SET USER ID for example by session

if($_POST["delete"])
{
 mysqli_query($conn, mysqli_real_escape_string($conn, "UPDATE login SET activated = 'no' WHERE id = '$userid'"));
 // Do other stuff
}

?>

检查账户是否激活

登录时,首先检查用户名和密码是否正确,然后然后检查帐户是否已激活。使用这样的东西:

$activated = mysqli_num_rows(mysqli_query($conn, mysqli_real_escape_string($conn, "SELECT * FROM login WHERE username = '$username' AND password = '$password' AND activated = 'yes'")));

如果用户已激活,$activated 将为 1。因此,在设置会话(或其他)之前

if($activated == 1)
{
  // your stuff
}

代码未经测试,但应该可以工作。如果它不起作用,请在评论中寻求更多帮助。

编辑: 永远不要将密码作为纯文本来保护!使用 md5(仍然不安全)或使用散列。 Hashing on php.net 感谢 halfer

我通常会向可能已删除列的表添加一个 deleted_at 字段:这样,您仍然拥有数据,但它本身已停用。如果要删除字段,请将 deleted_at 设置为当前时间戳。然后,在提取数据时,检查 deleted_at 字段是否为 NOT NULL,您将知道它是否已停用。