0

这是我登录页面的代码。我希望能够计算使用我的网站的次数以及他们从哪里登录。我可以进行计数,但不能计算 IP 地址。

在表格中,我希望它像这样显示每个用户数据

这些是我表中的列。用户名、上次登录、登录时间、IPADDRESS、IPADDRESS1、IPADDRESS、……IPADDRESS10。我已经创建了所有 10 个不同的 IP 地址列(我不太确定如何使以下内容看起来像在表格中,所以我真的很抱歉)

用户名 | 最后登录 | 登录时间 | IP 地址 | IPADDRESS1 | IPADDRESS2 ...... | IPADDRESS10

跳线 | 21-12-2012 8.59PM | 5 | 80.81.82.83 | 80.81.82.82 | 80.81.82.83

每次使用新的IP地址从同一用户登录时,该IP地址将被记录到表中。每个用户最多有 10 个不同的 IP 地址。表格是我第一次想到的,所以我不确定这是否是在表格中展示它们的最佳方式,所以也请给我推荐。

如何将这些 IP 地址添加到表中?我不太确定如何分隔每个 IP 地址列。当我得到新的IP地址时,它只是不断覆盖旧的IP地址。

非常感谢。

var $HOST = "website.com";  
var $USERNAME = "username"; 
var $PASSWORD = "password"; 
var $DBNAME = "database";   

function authenticate($username, $password) {

$Auth = new auth();
$detail = $Auth->authenticate($username, $password);

    if (ereg("'", $username)) 
    {
        return "invalid username";
    }

    if (ereg("'", $password)) 
    {
        return "invalid password";
    }

    $query = "SELECT * FROM user WHERE uname='$username' AND passwd=MD5('$password') AND status <> 'inactive'";

    $UpdateRecords = "UPDATE user SET lastlogin = NOW(), logincount = logincount + 1 WHERE uname='$username'";
    $connection = mysql_connect($this->HOST, $this->USERNAME, $this->PASSWORD);

    $SelectedDB = mysql_select_db($this->DBNAME);
    $result = mysql_query($query); 

    $numrows = mysql_num_rows($result);
    $row = mysql_fetch_array($result);

    if ($numrows == 0) {
        return 0;
    }

    */
    else {
        $Update = mysql_query($UpdateRecords);
        return $row;
    }
4

3 回答 3

4

最好有一个包含 (USERNAME | IPADDRESS | TIME) 列的单独表。这样,您将能够为给定用户更有效(和更轻松地)存储不同的 IP 地址。然后,您必须选择一种算法来保留这些信息(保留前 10 个不同的 IP 地址?保留后 10 个?...)

于 2012-08-27T09:10:41.360 回答
0

使用带有 userid、ipaddress、logged_in_date_time 的单独表。每次他们登录时,检查他们的 IP 地址。在查询中使用 GROUP By ipaddress 并查看该用户是否有 10 个不同的 ip。现在如果用户有相同的IP然后让他进入...如果IP不同并且有超过10个IP不要让他进入。

编辑:

但是您的要求在用户看来并不方便。我使用 ADSL 连接并且我的 IP 经常更改,因此如果您的数据库有我的 10 个不同的 IP,我将无法登录到您的系统,这对用户不友好。此外,如果我的系统在网络中,100 个用户可能会使用相同的 IP 访问您的系统。

使用准备好的语句、PDO 或至少 mysqli 函数来确保应用程序安全。mysql 函数已折旧。

于 2012-08-27T09:16:28.643 回答
0

您应该使用两个表。一个用于存储用户的用户名密码上次登录时间登录次数,另一个用于存储用户的 IP 地址。您可以存储用户每次登录时的用户名/用户 IDIP 地址登录时间戳。

这样,如果您只想存储用户的最后 10 个 IP 地址,您可以过滤 sql 搜索以仅显示该特定用户的 IP 地址,然后将最早的 IP 地址条目替换为最新的,这样您将始终有最后 10 个条目。

于 2012-08-27T09:24:46.607 回答