Bueno, viendo la pagina que pusiste en tu comentario, puedo deducir que un visitante es literalmente eso, incluyendo a los usuarios, si en un futuro se tiene la funcionalidad de registrar a los mismos.
Para hacer lo que quieres, es necesario que guardes los datos en cookies usando JS en un principio y, despues, veas el tema de actualizar los registros de la base de datos de alta performance, que despues hablaremos de eso.
En un principio vamos a contextualizar para dar sentido a la solución:
¿Que es un visitante?
El visitante es todo aquella computadora que esta conectada a Internet con una IP especifica a través de un ISP y que visita la pagina en cuestión. Cuando esta PC se desconecta y se vuelva a conectar, pueden ocurrir dos cosas:
- Que mantenga su dirección IP,
- Que se renueve la dirección IP.
Independientemente de estos dos comportamiento, vamos a considerar y asumir lo siguiente: Un visitante es toda aquella PC que visita el sitio con una IP determinada y, cuando su IP cambia por alguna razón, se lo considera un nuevo visitante.
Ademas, debemos considerar el comportamiento de una persona a la hora de usar un PC. Por lo general, uno enciende y usa la computadora durante el día y, por la noche, se apaga. Este punto es importante para determinar correctamente si entra un nuevo usuario o no y esto se debe por lo siguiente:
- En la fecha 1/1/2001 con IP 1.1.1.1 visita la web.
- En la fecha 2/1/2001 con IP 1.1.1.1 visita la web.
Entonces se plantea las siguientes dudas: La misma IP visito el sitio 2 días consecutivos. ¿Es la misma PC que visito el sitio o son 2 PC diferentes?.
Porque puede darse que la persona que uso ese PC haya apagado la computadora por la noche y cuando se conecte de nuevo tenga una IP nueva. Pero tambien puede darse que esa persona no se haya desconectado por que dejo la computadora toda la noche encendida. En ese caso, es el mismo usuario pero en el anterior no. También esta la opción de que si haya apagado la computadora pero el router este encendido siempre y entonces, este mantenga la IP hasta que se apague o reseteé.
Desde mi punto de vista, habiendo planteado todo lo anterior, yo consideraría que:
Un visitante es una computadora con una IP determinada en un día determinado. Si al siguiente día, la misma IP se visita el sitio, se lo debería considerar como un visitante nuevo".
Posibles soluciones
En un principio, muchos de los datos que recolectas están del lado del cliente, o sea, el navegador. Por ende, recomendaría que captures la mayoría de los datos con JS y los guardes en cookies. Hay ciertas cosas, que posiblemente necesiten procesamiento por parte del servidor y se necesite una implementación híbrida para satisfacer las necesidades del sitio.
Voy a re-ordenar (y agregar) las necesidades por orden de implementación, para sea mas fácil, despues, integrar todo.
Aclaro, de entrada, que la cookie DEBE EXPIRAR en UN DÍA.
IP del navegador que me visita (la necesidad que quiero que agregues)
Esto es medio "tricky" ya que JS no lo podes hacer. Una manera para hacerlo es:
- Cuando el cliente solicita una pagina, por lo general, el servidor sabe desde donde se solicita.
- El servidor toma la IP del cliente y la guarda en una variable.
- Escribe ese variable en un input del tipo hidden en alguna lugar del sitio.
- Se renderiza la pagina donde ya se escribió la IP del cliente.
- JS lee ese input y lo guarda en una cookie.
Fecha de la visita y Momento en que comenzó la visita [hora:min:seg]
- Obtienes la desde el momento entra al sitio por primera vez. Esto es por que, cuando entra por primera vez al sitio no existe el cookie.
- La transformas a UTC.
- La guardas en el cookie.
Seria algo así:
var currentDate = new Date().now().toUTCString();
document.cookie = "entro:" + currentDate + "; ";
Desde donde fue que llegó a esta página.
Esto se puede conseguirse desde el campo referer
la cabecera HTTP o desde el mismo JS con document.referer
.
Resolución del dispositivo que usa.
Con las miembros del objeto screen: window.screen.width
y window.screen.height
.
Duración del visitante en la página que está visitando
Para esto, te diría que siempre guardes en la fecha de actual pagina visitada dentro del mismo dominio. Y despues puedes obtener el tiempo total de visita haciendo una simple resta:
[FechaHoraDeUltimaPaginaVisitadaDelDominio] - [FechaHoraDePrimerVisita]
.
Acá hay que ver un problema por que se plantea la siguiente duda: ¿Que pasa si el usuario en un día entra repetida veces pero en intervalos de tiempo?
Por ejemplo: De 9 a 10, 12 a 13, 17 a 18, 21 a 20.
Con la formula anterior el total de tiempo visitado nos daría 20 - 9 = 11
cuando en realidad el usuario estuvo: (10 - 9) + (13 - 12) + (18 - 17) + (21 -20) = 4
.
Acá se debería aplicarse un umbral en el algoritmo de tiempo total de visita. Pongamos que el umbral sea que despues de 30 minutos(especulo, exageradamente, que una persona no puede permanecer en una pagina mas de 30 minutos).
Entonces quedaría algo así(en psuedo-código):
SI dia.ahora() - fechaHoraDeUltimaPaginaVisitada > 30 ENTONCES
primeraVisita = dia.Ahora();
fechaHoraDeUltimaPaginaVisitada = vacio;
SINO
fechaHoraDeUltimaPaginaVisitada = dia.Ahora();
FIN SI
Ahora viene lo complicado...
Persistiendo las estadísticas
Recomiendo el uso obligatorio de AJAX para estas necesidades, debido a las posible sobrecarga del servidor debido a las repetidas y continuas llamadas de múltiples visitantes a guardar estos datos.