2010-10-23 9 views
15

Actualmente tengo un archivo llamado "hits.php" y en cualquier página que quiero rastrear los hits de la página solo uso <?php include("hits.php"); ?>¿Solo se permite el seguimiento de visitantes únicos?

¿Cómo puedo rastrear solo visitantes únicos? Mis visitas son falsas, ya que puede ser actualizada por la misma persona y los hits aumentan.

Aquí es mi fuente:

<?php 
$hits = file_get_contents("./client/hits.txt"); 
$hits = $hits + 1; 

$handle = fopen("./client/hits.txt", "w"); 
fwrite($handle, $hits); 
fclose($handle); 

print $hits; 

?> 

Realmente no sé cómo podría hacer la comprobación de galletas ... ¿hay una manera de comprobar IP? ¿O qué puedo hacer?

Gracias StackO.

+2

Consideraría usar algo que no sea un archivo plano para realizar un seguimiento del número de visitas que tiene un script. La razón es que una condición de carrera puede ocurrir y omite contabilizar algunas entradas o (peor aún) no puede abrir el archivo y restablecer el recuento a 1 (si file_get_contents() devuelve FALSE, FALSE + 1 = 1) –

Respuesta

17

El método más simple sería la comprobación de cookies.

Una mejor manera sería crear una base de datos SQL y asignar la dirección IP como clave principal. Luego, cada vez que un usuario visita, inserta esa IP en la base de datos.

  1. Cree una función incluida en todas las páginas que compruebe $_SESSION['logged'] que puede asignar cualquier "bandera" que desee.
  2. Si $_SESSION['logged'] devuelve 'falso', inserte su dirección IP en la base de datos MySQL.
  3. Establezca $_SESSION['logged'] en 'verdadero' para que no pierda recursos registrando el IP varias veces.

Nota: Al crear la tabla MySQL, asigne el campo de la dirección IP 'como la clave.

<?php 
    session_start(); 
    if (!$_SESSION['status']) { 
    $connection = mysql_connect("localhost", "user", "password"); 
    mysql_select_db("ip_log", $connection); 

    $ip = $_SERVER['REMOTE_ADDR']; 
    mysql_query("INSERT INTO `database`.`table` (IP) VALUES ('$ip')"); 

    mysql_close($connection); 
    $_SESSION['status'] = true; 
    } 
?> 
+0

No sé cómo hacer la comprobación de cookies. ¿Cómo puedo usar las cookies? – Kyle

+0

Lea mi respuesta completamente, también puede verificar direcciones IP. Pensándolo bien, déjame agregarle algo. –

+0

@Kyle: Esa es una pregunta completamente diferente, y una que se puede responder buscando en Google cookies [php] (http://www.google.com.au/search?sourceid=chrome&ie=UTF-8&q=php+cookies) . –

2
  1. En un nivel básico, se puede obtener la dirección IP del cliente mediante el uso de la $_SERVER['REMOTE_ADDR'] propiedad PHP
  2. considerar el establecimiento de una galleta o mediante una sesión, aunque esto puede ser derrotado por la eliminación de una galleta o rechazo de cookies Consulte los documentos de PHP setcookie para obtener más información.
  3. Hay otros métodos para la toma de huellas dactilares navegador - echa un vistazo a todos los diferentes datos que usted podría utilizar posiblemente en https://panopticlick.eff.org/index.php
2

¿Qué hay de Google Analytics si puedes. podría hacer una base de datos o crear otro archivo con las direcciones IP, pero podría complicarse con un archivo plano como ese.

2

No hay una solución perfecta, pero los primeros dos métodos (dirección IP y/o cookies) son los más confiables, y una combinación podría ser incluso mejor.

En lugar de reinventar la rueda, utilicé una solución estándar. Por razones comerciales evité Google Analytics (no quiero que Google conozca mis estadísticas web, sus mejores intereses no son míos). Probablemente estén bien para sitios web no comerciales, o si no usa Google para publicidad. También hay docenas de alternativas. Por ejemplo, uso GetClicky.com

1

Encontré la solución de muy mala calidad y solo una forma rápida y sucia de hacerlo.

Yo también estaba desarrollando algo similar y formulé un método rápido que funciona sin redundancia.

Necesitaba un contador cada vez que alguien accedía al perfil de otro usuario.

Pseudo:

  • crear una tabla con el nombre del espectador y el nombre de viewee (daily_views tabla).
  • Verifique si existe el nombre del espectador con el nombre del usuario (en la misma fila).
  • Si no existen, actualice el contador de usuarios +1 (en la tabla de usuarios).
  • No hacer nada.
  • Restablecer todos los valores de la tabla null cada 24/12 horas mediante el trabajo cron.

Esto negar la misma persona que acceda al mismo perfil de usuario para añadir 1 al contador en actualización para todo el día (o 12 horas), mientras que la solución anterior por Glenn Nelson sería de hecho añadir 1 al contador , pero niega agregar a cada contador del usuario al mismo tiempo.

No sólo esto, pero si tuviera que cerrar la sesión y volver a iniciar sesión en el sitio Web, a continuación, sería simplemente volver a añadir a la barra en la que algunos casos los trolls y haxorz aspirante de explotar todo ese (como la sesión es destruido y comenzó de nuevo).

Éstos son mis tablas de ejemplo:

users 
{ 
user_id INT(8) auto increment, user_name varchar(32), user_counter INT(12) 
}; 
daily_views 
{ 
view_id INT(8) auto increment, viewer_name VARCHAR(32), viewee_name VARCHAR(32) 
}; 

Aquí es código de ejemplo que he escrito:

<?php 
session_start(); 
$uname = $_SESSION['username']; 
$vieweepage = $_GET['name']; //gets the name of the persons page/profile via previous page/form 
$connect = mysql_connect("localhost","user","password") or die("Couldn't connect; check your mysql_connect() settings"); 
$database = mysql_select_db("database") or die("Could not locate database!"); 

$query = mysql_query("SELECT user_counter from users"); 
$query = mysql_fetch_row($query); 
$counter = $query[0]; 
$viewcheck = mysql_query("SELECT viewer_name from daily_views WHERE viewee_name='$vieweepage'"); 
$viewrow = mysql_num_rows($viewcheck); 

$newcounter = $counter + 1; 

if($viewrow == 0) 
{ 
$update = mysql_query("UPDATE users SET user_counter='$newcounter' WHERE user_name='$vieweepage'"); 
$insert = mysql_query("INSERT into daily_views (viewer_name, viewee_name) VALUES ('$uname', '$vieweepage')"); 
} 
?> 
+0

Esto es genial, pero asegúrese de escapar esas cuerdas. ¡Nunca confíes en la entrada del usuario! – Kyle

0

Actualmente estoy usando remote address y session ID para visitor.i piensan sus visitantes válida porque una un usuario único puede visitar el sitio en un solo día y el contador no depende de la actualización; solo depende de la nueva sesión.

Cuestiones relacionadas