繁体   English   中英

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

[英]Record user's ip address everytime user loggin in - PHP

这是我在登录页面上的代码。 我希望能够统计使用我的网站的次数以及他们从何处登录。 我能够进行计数,但不能进行ipaddress计数。

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

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

USERNAME | 最后登录| 时代登录| IP地址 IPADDRESS1 | IPADDRESS2 ...... | IPADDRESS10

IHOP | 2012年12月21日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;
    }

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

使用带有用户ID,IP地址和已登录日期的单独表。 并且每次他们登录时,请检查其IP地址。 在查询中使用GROUP BY ipaddress来查看该用户是否有10个不同的ip。 现在,如果用户拥有相同的IP,则让他进入...如果IP不同,并且有10个以上的IP不要让他进入。

编辑:

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

为应用程序安全性,使用准备好的语句,PDO或至少使用mysqli函数。 mysql函数已弃用。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM