以下是登录页面中的代码。我想能够计算出有多少次使用我的网站,以及他们从哪里登录。我会数数,但不会用ipad。
在表中,我希望它显示每个用户的数据,如
这些是我表中的列。用户名,上次登录,登录次数,ipad地址,ipad地址1,ipad地址。。。。。。IPADDRESS10.我已经创建了所有10个不同的ip地址列(我真的不确定如何使以下内容看起来像是在表中,所以我真的很抱歉)
用户名|上次登录次数|IPADDRESS|IPADDRESS1|IPADDRESS2……|IPADDRESS10
IHOP | 2012年12月21日下午8点59分| 5 | 80.81.82.83 | 80.81.82 | 80.81.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个?…)
uSe具有userid、ipaddress、logged_in_date_time的独立表。每次他们登录时,都要检查他们的IP地址。在查询中使用GROUP By ipaddress,查看该用户是否有10个不同的ip。现在,如果用户有相同的IP,那么就让他进来……如果IP不同,并且有10个以上的IP,就不要让他进来。
编辑:
但在用户看来,您的要求并不方便。我使用ADSL连接,我的IP经常更改,所以如果你的数据库有我的10个不同的IP,我就无法登录到你的系统,这对用户来说是不友好的。此外,如果我的系统在网络中,100个用户可能会使用相同的IP访问您的系统。
为应用程序安全性使用prepared语句、PDO或至少使用mysqli函数。mysql函数已折旧。
您应该使用两个表。一个用于存储用户的用户名、密码和上次登录时间以及登录次数,另一个用于保存用户的IP地址。您可以存储用户每次登录时的用户名/userid、ip地址和登录时间戳。
这样,如果你只想存储用户的最后10个ip地址,你可以过滤sql搜索,只显示该特定用户的ip地址,然后用最新的ip地址替换最早的ip地址条目,这样你就总是有最后10个条目。