每次用户登录时记录用户的IP地址 - PHP

时间:2012-08-27 09:06:36

标签: php ip ip-address

以下是登录页面中的代码。我希望能够计算使用我的网站的次数以及他们从哪里登录。我能够计算,但不是ipaddress。

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

这些是我表格中的列。 USERNAME,最后登录,登录时间,IPADDRESS,IPADDRESS1,IPADDRESS,...... IPADDRESS10。我已经创建了所有10个不同的ip地址列(我不确定如何让它们看起来像是在表中,所以我真的很抱歉)

USERNAME |最后登录|登录时间| IPADDRESS | IPADDRESS1 | IPADDRESS2 ...... | IPADDRESS10

IHOP | 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;
    }

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分: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函数被折旧。

答案 2 :(得分:0)

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

这样,如果你只想存储用户的最后10个ip地址,你可以只过滤sql搜索只显示该特定用户的ip地址,然后用最新的一个替换最早的ip地址条目,所以你总是有最后10个条目。