Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

267
Vistas
cómo rastrear visitantes con php y jquery, para determinar un visitante único de una página vista

Quería realizar un seguimiento de los visitantes que van a mi sitio web. Cuando llega un visitante, quiero agregar a mi base de datos que ha habido un nuevo visitante y poder saber si regresa o es nuevo.

¿Sería mejor rastrearlos con una cookie o mediante una dirección IP? Habría una tabla llamada visitantes, que tendría el id_visitante y su dirección IP o código de cookie. Otra tabla llamada visitas, que rastrearía cada vez que un "visitante" llega al sitio, con id_visita, id_visitante y fecha/hora.

¿Cómo puedo identificar si se trata de una nueva visita o simplemente de otra página vista? es decir, cada página del sitio tendría este código que agregaría al visitante, pero no me gustaría que se registrara como una nueva visita cada vez que ven una página.

El otro pensamiento que tuve fue usar $_SERVER['HTTP_REFERER'], luego puedo decir que el visitante no está haciendo otra vista de página desde mi sitio, pero no estoy seguro de qué tan confiable es eso.

Así que me preguntaba ¿cómo podemos hacer esto?

about 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

La mejor manera es usar una combinación de dirección IP y COOKIES. Guardar solo la dirección IP no es suficiente porque puede cambiar con frecuencia cuando el usuario usa un proxy. Para cada carga de página, puede usar un código como este

 // Get IP address of user function getUserIP() { if (!empty($_SERVER['HTTP_CLIENT_IP'])) { $ip = $_SERVER['HTTP_CLIENT_IP']; } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; } else { $ip = $_SERVER['REMOTE_ADDR']; } return $ip; } // Check if cookie exists. If not then set new cookie. Return its value function getUserCookie() { if(isset($_COOKIE['visited'])) { // cookie is already set } else { list($usec, $sec) = explode(" ", microtime()); // Micro time! $expire = time()+60*60*24*30; // expiration after 30 day setcookie("visited", "".md5("".$sec.".".$usec."")."", $expire, "/", "", "0"); } return $_COOKIE['visited']; }

Puede guardar ambos valores en el visitante de la tabla de la base de datos si no hay ningún visitante con estos valores y, por lo tanto, puede decir que es un nuevo visitante único. Si hay un visitante con uno de estos valores, entonces es un visitante que regresa, por lo que debe actualizar su tabla de visitas.

Pero creo que es mucho mejor tener una sola mesa ya que no conoces a tus visitantes. Con una sola consulta SQL, aún podrá distinguir visitantes únicos, páginas vistas, flujo de visitantes, tiempo de visita, etc.

about 4 years ago · Santiago Trujillo Denunciar

0

Sugeriría usar una cookie persistente para almacenar información del visitante.

Seguimiento de visitantes recurrentes

Cuando un visitante llega a su sitio, puede comprobar si ya tiene una cookie de id_visitante en su navegador:

  • Si no lo hacen, cree una ID de visitante para ellos y guárdela en una cookie, luego use AJAX para enviar la ID a su servidor y cree un nuevo visitante a partir de ella en la base de datos.
  • Si lo hacen, simplemente puede consultar su servidor a través de AJAX para obtener información de visitantes anteriores o agregar su sesión actual a sus visitas anteriores. Más sobre esto a continuación.

De esta forma, puede realizar un seguimiento de los usuarios individuales identificando el navegador desde el que están visitando, ya que es más probable que sea estable que su IP o cualquier otra identificación anónima.

Nota: también puede hacerlo simplemente usando $_COOKIE de PHP sin AJAX, pero me resulta más cómodo separar completamente el código del lado del cliente del back-end. Es sólo una cuestión de preferencia personal.

Algún pseudocódigo de front-end para esto

 if (haveVisitorCookie) { getVisitorDataByID(visitorCookie); //some ajax implementation } else { createVisitorCookie(); //save to back-end }

Seguimiento de la actividad del usuario en el sitio

La parte anterior solo cubre la identificación de visitantes nuevos/recurrentes y la información persistente del visitante. Para registrar lo que hace un usuario en una sola visita, la forma más fácil es usar las sesiones integradas de PHP .

Todo lo que necesita hacer es llamar a session_start() al comienzo de su código y a su visitante se le asigna una sesión que permanecerá abierta hasta que el visitante permanezca en cualquier página de su sitio. Luego puede agregar datos a la sesión actual con la variable mágica $_SESSION . Puede almacenar cualquier dato en él en forma de $_SESSION['key'] = value .

Por ejemplo, puede consultar el ID de la sesión actual en cada carga de página y, si ya existe, agregarle la acción actual; de lo contrario, guárdelo como una nueva visita del mismo visitante.

Algo de pseudocódigo de back-end

 session_start(); if ($visitorID) { //visitorID is sent from your front-end and contains the cookie data $previousSession = getLastVisitorSession($visitorID); $currentSession = session_id(); if ($previousSession) { if ($previousSession === $currentSession) { // New pageview on same session } else { // New session ... saveNewVisitorSession($visitorID, $currentSession) } } }

Puntos de bonificación: incluso puede ayudar a sus usuarios a continuar desde donde lo dejaron cargando su última sesión en caso de que no tengan una ID de sesión actual pero tengan una ID de visitante con una sesión anterior almacenada

¡Espero que esto ayude!

about 4 years ago · Santiago Trujillo Denunciar

0

Lo siento de antemano, no es realmente el más bonito de todos los códigos :) Pero supongo que esto podría ser más o menos.

 <?php //Step over if cookie is if (!isset($_COOKIE["SITE_VISITED"])) { already set setcookie('SITE_VISITED', 'X'); $db = mysqli_connect('localhost', 'bfu', '1234', 'visits'); //Do we already have a record in the DB? $res = mysqli_query($db, sprintf("SELECT * FROM visits WHERE ipaddr='%s';",$_SERVER['REMOTE_ADDR'])); if ($res === FALSE && $res->num_rows = 0) { //Record in DB not found, let's create one $res2 = mysqli_query($db, sprintf("INSERT INTO visits('ipaddr','page') VALUES ('%s','%s');",$_SERVER['REMOTE_ADDR'],$_SERVER['REQUEST_URI'])); } mysqli_close($res); } ?>
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda