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

时间:2015-02-26 17:03:43

标签: php mysql login

我的网站需要能够"禁用"或者"取消激活"用户的帐户(当然,根据用户的要求)。实际上,我在网站上添加的链接是完全删除帐户。

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

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

但是,我不知道如何禁用/停用MySQL数据库中的帐户,以便用户无法再登录我的网站。广泛的在线搜索没有产生任何结果。

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

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

知道在PHP中禁用/取消激活用户帐户需要什么样的代码?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

首先,添加一行"激活"到你的登录表(我现在叫它"登录")。

<强>&#34;删除&#34;一个帐户(或只是禁用))

这样的东西?我不知道你是否与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'")));
如果用户被激活,

$激活将为1。所以,在设置会话(或其他)之前

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

代码未经测试,但应该有效。如果它没有工作,请在评论中寻求额外的帮助。

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