2

我有这样的代码:

include ("config.php");

$username = $_POST['username'];
$password = $_POST['password'];

$do = $_GET['do'];

if($do=="login")
{
    $cek = mysql_query("SELECT password, user_level FROM t_users WHERE username='$username' AND password='$password'");
    if(mysql_num_rows($cek)==1)
    {
        $c = mysql_fetch_array($cek);
        $_SESSION['username'] = $c['username'];
        $_SESSION['user_level'] = $c['user_level'];

        if($c['user_level']=="supervisor")
        {
            header("location:supervisor.php");
        }

        else if($c['user_level']=="user")
        {
            header("location:home.php");
        }
        else if($c['user_level']=="root")
        {
            header("location:administrator.php");
        }
        else if($c['user_level']=="manager")
        {
            header("location:manager.php");
        }
        else if($c['user_level']=="admin")
        {
            header("location:admin.php");
        }
        else if($c['user_level']=="director")
        {
            header("location:director.php");
        }
    }
    else
    {
        header('Location: index.html');
    }
}
else if($do=="logout")
{
    date_default_timezone_set("Asia/Jakarta");
    $last_logged_out = date("j-F-Y, G:i ");
    $ip_address=$_SERVER['REMOTE_ADDR'];
    mysql_query("update t_users set last_logged_out='$last_logged_out', ip_address='$ip_address' WHERE username='$_SESSION[username]'");

    unset($_SESSION['username']);
    unset($_SESSION['user_level']);
    header("location:index.html");
}

如果有人登录并且在同一时间或不同时间有人使用相同的用户名登录然后我希望系统将通知该用户已经登录,那么我如何提供功能代码,因此具有相同用户名的用户无法登录直到用户注销之前。

有人可以帮助我吗?谢谢你。

4

3 回答 3

0

尝试在会话中添加状态。例如,如果用户已登录,则状态 = 1,反之亦然,因此每次该用户尝试登录时,如果发生这种情况,您可以自由地执行您想要的任何操作。干杯。

于 2012-05-07T08:14:04.720 回答
0

当用户登录时,在数据库中设置一个列,例如设置loggedin为 1,然后在后续登录时检查该列是否设置为 1,如果是,则不允许登录,直到以该用户名登录的人登录出,那么您需要将该列设置为 0 以允许后续登录。

您可能需要某种超时,这样任何人都无法以该用户身份登录并永远保持登录状态。

于 2012-05-07T08:18:20.770 回答
0

1)阅读http://php.net/manual/en/function.mysql-real-escape-string.php

2)您必须将有关登录用户的信息存储在可以为任何用户获取的位置(即不在$_SESSION 中)。例如,您可以将其存储在数据库中。

但是您的问题是,如何知道该用户已注销。如果用户不注销(仅关闭网络浏览器),用户登录将是小盒“forwer”。您可以考虑一些超时 - 如果用户在网络上的任何操作超过 1 小时,则在任何其他用户尝试登录时将其注销。(每次用户在您的网络上执行任何操作时,您都应该更改超时)。

于 2012-05-07T08:19:01.567 回答