Contador de visitas Web con PHP y MYSQL

Contador de visitas Web con PHP y MYSQL. En este artículo vamos a explicar cómo añadir un contador de visitas y la base de datos como medio de almacenamiento con el objetivo de tener un control de las visitas diarias en tu sitio Web y en cualquier página que tengamos, ya sea estática o dinámica.
El contador de visitas será transparente y de fácil aplicación. Se tratará de insertar un código que nos permitirá tener un control de las visitas que recibimos en nuestra Web teniendo en cuenta el día y la dirección URL para evitar duplicaciones en el contador.
Sin embargo, necesitaremos añadir una nueva tabla en la base de datos, para guardar los registros de visitas. La puedes llamar tabla “visitas”.
Los campos utilizados en la tabla serán los siguientes:
- Idvisitas
- enlace
- visitas
Contador de visitas Web con PHP y MYSQL

Vista de los datos almacenados en la base de datos
Los Resultados del contador en la página web lo veremos ver como funciona. Si la página es única se incrementarán las visitas, y si visitan otra URL se guardarán en un nuevo campo como la imagen de arriba.
Ahora crear un archivo llamado visitas.php
En el cual se procesará las visitas todo esto en PHP, si el enlace existe se incrementará las visitas, utilizará cookies para no contabilizar impresiones.
<?php ob_start(); header("Content-type: text/javascript"); // Creamos la conexion con la base de datos $con = @mysqli_connect('localhost', 'USUARIO_BD', 'PASSWORD_BD', 'NOMBRE_BD') or die("document.write('Error');"); // Obtenemos, y validamos enlace actual $enlace = $_SERVER['HTTP_REFERER']; if (!$enlace || $enlace == '') { die(); } // Obtenemos los datos de la base de datos $sql = "SELECT visitas FROM visitas WHERE enlace='$enlace'"; $query = mysqli_query($con, $sql); $row = mysqli_fetch_assoc($query); /*creamos los codigos querys verificando primero las cookies, para contar visitas y no impresiones web*/ if (isset($_COOKIE[md5($enlace)])) { // si existe la cookie solo le damos el valor a $visitas $visitas = $row['visitas']; echo "document.write($visitas);"; } elseif (!isset($_COOKIE[md5($enlace)])) { // Comprobamos si el enlace ya esta en la base de datos $rows = mysqli_num_rows($query); if ($rows > 0) { // Cuando exista lo enlace actualizamos $SQL = "UPDATE visitas SET visitas=visitas+1 WHERE enlace='$enlace'"; if (mysqli_query($con, $SQL)) { // Si se inserta la visita $visitas = ($row['visitas']) + (1); // Le sumamos uno para mostrar la visita actual echo "document.write($visitas);"; setcookie(md5($enlace), '_vStD', time() + 86400); // Y creamos la cookie de 1 dia } else { // Si no se inserta la visita $visitas = $row['visitas']; // Solo obtenemos las visitas echo "document.write($visitas);"; } } elseif ($rows == 0) { // Cuando no existe el enlace en la base de datos la insertamos $SQL = "INSERT INTO visitas (enlace,visitas) VALUES ('$enlace',1)"; if (mysqli_query($con,$SQL)) { // Si se inserta la nueva enlace echo "document.write(1);"; setcookie(md5($enlace), '_vStD', time() + 86400); // Y creamos la cookie de 1 dia } else { // Si no se inserta mostramos echo "document.write(0);"; } } } // Por ultimo cerramos la conexion, y cerramos el script ob_end_flush(); mysqli_close($con); die(); ?>
Y los más principal como insertar en contador en todas nuestras aginas para que se registren las visitas de manera eficiente.
Visitas: <script src="http://localhost/base/conta/misvisitas.php"></script>
Espero que les haya servido, muchas gracias.

Tengo una duda, no entiendo el funcionamiento de la cookie, ya que refresco la pagina y me sigue mostrando el mismo numero de visitas. Cuando abro la página en otro navegador o creo una ventana privada del mismo me aumenta la primera vez pero si refresco en esa misma ventana ya no aumenta el valor de visitas, que deberia modificar para que me incrementase a cada refresco de la pagina?
Hola! El contador va de 10, pero tengo un problema.
En forma local con el xampp funciona la cookie y el settime pero cuando lo subo al servidor me cuenta las visitas pero la cookie no aparece, que puede ser?
Si apreto F5 20 veces, hay 20 visitas una detras de la otra