按唯一编号定义用户

时间:2014-04-25 10:12:54

标签: php mysql

首先,我是php的新手,所以请不要接受它说'' RTM或其他东西。 Atm我试图编辑(编辑)一些脚本,最后应该告诉我目前有多少用户在线。

但是到目前为止,我看到的还有ip或ip标识或cookie。这两种方式对于计算在线用户的准确性并不准确,原因有几个,特别是cookie。所以由于我的菜鸟状态以及明显缺乏PHP的知识,我希望你能帮助我使用正确的用户识别算法甚至代码。

我使用 php5.5 ,如果这可能会有所帮助,我不会在我的网站上使用也不想使用flash / java等,除了纯html,css和PHP。我试着想想如何避免使用代理,例如,因为我知道如果你使用flash或java,你可以进一步采用GUID(全球唯一标识符)甚至识别用户mac地址,但正如我告诉你的,我不想使用除html,css和php之外的任何东西。但是我觉得我对它如何仍然可以非常精确地工作非常了解:

如果我在 Ip(甚至是代理!)中添加一些唯一的数字,那么它将非常独特。所以,即使你打开一个新的标签,脚本也可以进行一些循环并检查ip(如果它的代理与否,无关紧要)是否具有该额外的数量,如果它只是忽略它(或类似的东西,重点不是添加另一个,就像常规的ip)。

所以你真的很确定在关键时刻关于用户在线的真实统计数据。 U对待代理然后就像真正的ip一样,而且这种方式更正确,我猜。但是,我不知道如何真正意识到这一点。如果你有助于增加未来,我会非常高兴。 这是代码:

$user = "blabla"; 
$pass = "blabla";
$host = "blabla";
$base = "blabla";
@mysql_connect($host,$user,$pass) or die(mysql_error());
@mysql_select_db($base) or die(mysql_error());

function onLine() {
    $distance = 300;
    $ip = $_SERVER['REMOTE_ADDR'];
    $query = "DELETE FROM `online` WHERE 'stamp'+$distance < ".time()." OR `ip` = '$ip'";
    @mysql_query($query) or die(mysql_error());
    $query = "INSERT INTO `online`(`stamp`,`ip`) VALUES('".time()."','".$ip."')";
    @mysql_query($query) or die(mysql_error());
    $result = mysql_query("SELECT COUNT(*) FROM `online`");
    $row = mysql_fetch_array($result,MYSQL_BOTH);
    return ($row[0]);   
}
echo onLine();

当然数据库的名称是在线的,ID为int(8)A_I primary,stamp varchar(20),ip varchar(15)

太多的文字,我知道-_-

1 个答案:

答案 0 :(得分:1)

正如很多人在评论中所说,ip地址不是这样做的好方法。

只要你是php的初学者,重新发明轮子绝不是一个好主意。 我建议你使用会话,它已经为每个用户提供了一个唯一的标识符。该唯一标识符存储在cookie中,但相应的数据存储在服务器端。这是一种可靠的解决方案,也是最常用的解决方案。

PHP将会话数据存储在内部文件中,但可以更改此行为。例如,您可以将其设置为存储在数据库中。这样您就可以通过简单的SQL查询了解当前有多少人使用您的网站。

查看session_set_save_handler函数以了解有关实现的详细信息