Foros del Web » Programando para Internet » PHP »

¿Contar el tiempo de un usuario que lleva conectado?

Estas en el tema de ¿Contar el tiempo de un usuario que lleva conectado? en el foro de PHP en Foros del Web. Hola amigos, quiero montar un sistema que cada día cuente 30 minutos desde que inicias una sesión en la web, con un countdown y cuando ...
  #1 (permalink)  
Antiguo 21/04/2014, 04:53
 
Fecha de Ingreso: abril-2010
Mensajes: 267
Antigüedad: 14 años
Puntos: 1
¿Contar el tiempo de un usuario que lleva conectado?

Hola amigos, quiero montar un sistema que cada día cuente 30 minutos desde que inicias una sesión en la web, con un countdown y cuando llegue a 0, te de la opción de "Abrir regalo", ¿Cómo hago esto?, ¿Cómo cuento el tiempo que un usuario lleva conectado? Uso sesiones para el logueo.

¡Un Saludo!
  #2 (permalink)  
Antiguo 21/04/2014, 05:01
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: ¿Contar el tiempo de un usuario que lleva conectado?

Guarda en una variable de session el momento en que hace "login".

Haciendo la diferencia con el momento actual, sabrás cuanto tiempo lleva
__________________
>> Eleazan's Source
>> @Eleazan
  #3 (permalink)  
Antiguo 21/04/2014, 05:10
 
Fecha de Ingreso: abril-2010
Mensajes: 267
Antigüedad: 14 años
Puntos: 1
Respuesta: ¿Contar el tiempo de un usuario que lleva conectado?

:/ pero si se desconecta? es decir.. Yo me conecto, y estoy 10 minutos sin que llegue a los 30, y me voy, cuando entre si la session se ha guardado me da como si hubiera pasado la media hora :/, y necesitaría que al volver a entrar eso 10 minutos esten descontados.
  #4 (permalink)  
Antiguo 21/04/2014, 06:22
 
Fecha de Ingreso: marzo-2013
Ubicación: Neuquén Capital
Mensajes: 111
Antigüedad: 11 años, 1 mes
Puntos: 8
Respuesta: ¿Contar el tiempo de un usuario que lleva conectado?

Una pregunta, son 30 minutos de corrido? o pueden ser 5 minutos por hora durante el dia?


:)
  #5 (permalink)  
Antiguo 21/04/2014, 06:38
 
Fecha de Ingreso: abril-2010
Mensajes: 267
Antigüedad: 14 años
Puntos: 1
Respuesta: ¿Contar el tiempo de un usuario que lleva conectado?

Si pudieran ser 30 minutos de seguido mejor XD
  #6 (permalink)  
Antiguo 21/04/2014, 07:19
 
Fecha de Ingreso: marzo-2013
Ubicación: Neuquén Capital
Mensajes: 111
Antigüedad: 11 años, 1 mes
Puntos: 8
Respuesta: ¿Contar el tiempo de un usuario que lleva conectado?

Cita:
Iniciado por alejandromaringomez Ver Mensaje
Si pudieran ser 30 minutos de seguido mejor XD
Si es obligación para el usuario que sean 30 minutos seguidos es facil.. cuando el usuario se loguea se puede crear una variable $_SESSION['horaInicio'];
Cada ves que se recargue la página comprobás si la variable esa tiene una media hora menos que la actual un simple if.

Si es asi le mostras el premio. cuando el usuario salga o cierre session la session se destruye.. es decir que la proxima vez que conecte no va a ser la horaInicio anterior sino la actual del ultimo logueo.

Suerte
  #7 (permalink)  
Antiguo 21/04/2014, 07:50
 
Fecha de Ingreso: abril-2010
Mensajes: 267
Antigüedad: 14 años
Puntos: 1
Respuesta: ¿Contar el tiempo de un usuario que lleva conectado?

Sí, pero el problema está en que quiero que deba esperar esa media hora, es decir.. que cuando salga se guarde ese tiempo para que la próxima vez ese lo descuente durante el día :/
  #8 (permalink)  
Antiguo 21/04/2014, 08:26
 
Fecha de Ingreso: marzo-2013
Ubicación: Neuquén Capital
Mensajes: 111
Antigüedad: 11 años, 1 mes
Puntos: 8
Respuesta: ¿Contar el tiempo de un usuario que lleva conectado?

entonces puedes guardar el tiempo en la bd cada ves que cambie de pagina. un simple UPDATE..
Igual no logro comprender, porque querrías que se guarde para la próxima vez? Si planteas bien tu idea podemos ofrecerte una mejor ayuda!
  #9 (permalink)  
Antiguo 21/04/2014, 08:39
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: ¿Contar el tiempo de un usuario que lleva conectado?

Cita:
Iniciado por alejandromaringomez Ver Mensaje
Sí, pero el problema está en que quiero que deba esperar esa media hora, es decir.. que cuando salga se guarde ese tiempo para que la próxima vez ese lo descuente durante el día :/
La sesión tiene algo que se llama "expire" o "timeout"...

Con eso controlas que al cerrar la pagina, expire automáticamente, y tenga q volver a esperar....

Si quieres que este la media hora SIN cambiar de página, deberias controlarlo por javascript ;)

Saludos
__________________
>> Eleazan's Source
>> @Eleazan
  #10 (permalink)  
Antiguo 21/04/2014, 09:25
 
Fecha de Ingreso: abril-2010
Mensajes: 267
Antigüedad: 14 años
Puntos: 1
Respuesta: ¿Contar el tiempo de un usuario que lleva conectado?

Hola Eleazan,
En concreto me refiero a que deba esperar esa media hora conectado, si cierra sesion, pagina o se va de la web, al entrar siga por donde se ha quedado hasta que llegue a cero...

Por cierto, lo de que cuando se cierre la página la sesion expire automáticamente como se hace :O
  #11 (permalink)  
Antiguo 21/04/2014, 11:16
 
Fecha de Ingreso: abril-2014
Mensajes: 72
Antigüedad: 10 años
Puntos: 5
Respuesta: ¿Contar el tiempo de un usuario que lleva conectado?

Si yo fuera tú lo manejara con Ajax, Sesiones y Base de Datos:

1) Cuando el usuario inicia sesión, guardas la fecha y otros tres campos (que aquí llamaré tiempoConexon, regaloAbierto y horaVerificacion), en tiempoConexion guardas el número 1800 (cantidad de segundos que tiene media hora), en horaVerificación guardas la hora actual y en regaloAbierto pone un cero.

2) En el mismo DIV donde le mostrarás la opción de "abrir regalo" pones una llamada a Ajax, por ejemplo, al archivo recibeRegalo.php

3) En el en el evento onLoad del body mandas que la función Ajax del paso anterior se active y en se momento y se vuelva a activar cada X tiempo (yo sugeriría cada 15 segundos, pero tú decides).

4) En el archivo recibeRegalo.php pones:

4.1) Que lea los campos establecidos en el primer paso.

4.2) Si regaloAbierto es igual a 1 termina la ejecución, de lo contrario continua...

4.3) Si no hay fecha igual a la del día actual, inserta los datos del paso 1 y termina la ejecución...

4.4) Si tiempoConexion es igual o menor que cero, muestra la opción de abrir regalo y termina la ejecución.

4.5) Si la diferencia de tiempoVerificacion y la hora actual es de más de 1 minuto (los 15 segundos del paso 3 más algún tiempo por seguridad) termina la ejecución. De lo contrario le reste a tiempoConexion la diferencia en segundos entre tiempoVerificacion y la hora actual (haces UPDATE en la base de datos).

4.6) Si tiempoConexion llega a cero o menos, que muestre la opción de abrir regalo y termine la ejecución.

5) Asegúrate de que cuando el usuario haga clic en "Abrir regalo", actualices regaloAbierto igual a 1.

NOTA: Es importante que en el paso 3 pongas que se active en ese momento y no solo cada X tiempo, para cuando el usuario cambie de página.

NOTA 2: Cuida que cuando el usuario inicie sesión no inserte siempre los datos del paso uno, sino que verifique si hay un campo fecha igual al día actual, y si no hay, entonces lo inserte.

NOTA 3: Si quieres puedes hacer algo para que los usuarios conectados luego de las 11:30 (hora del servidor) reciban el regalo si duran los 30 minutos seguidos... pero el cómo hacerlo lo dejo a tu imaginación.

NOTA 4: Te recomendaría mostrar siempre la hora del servidor, a fin de que un usuario en otro país sepa a qué atenerse.


Espero haber sido de ayuda, y que puedas implementarlo. Me gustó la idea!

Última edición por zyxer; 21/04/2014 a las 11:24
  #12 (permalink)  
Antiguo 21/04/2014, 11:45
Avatar de Dalam  
Fecha de Ingreso: septiembre-2010
Mensajes: 409
Antigüedad: 13 años, 7 meses
Puntos: 56
Respuesta: ¿Contar el tiempo de un usuario que lleva conectado?

como te dijo zyxer es mejor mediante ajax.
A diferencia yo lo haria mediante comprobacion de peticiones, osea que cuando cargues la pagina mediante ajax haga una peticion al server y mediante una tabla en la base de datos hacer un update.
Por ejemplo, configuras tu script js para que haga una peticion de actualizacion cada 2 minutos, luego es solo cuestion de ir actualizando el contador de tiempo por cada llamada ajax que se reciba y si el tiempo total es igual a tus 30 minutos o lo que desees, que permita realizar acciones y si no es asi que actualice el contador de tiempo. Tambien para seguir actualizando el contador de tiempo desactivar los vinculos mediante js y si se pulsa alguno que antes de cambiar de pagina que mande una peticion de actualizacion a tu server, por que si no pasan los 2 minutos no sera computado el tiempo.

Respecto a lo de mirar si sale de la pagina debes hacerlo mediante javascript, no solo puedes comprobar que se marche de la pagina sino que tambien si cierra el navegador o no esta activa la pestaña en la que se muestra tu pagina.
Una opcion mas acertada seria que compruebes que halla actividad de raton o chequear eventos hover o algo por el estilo.
Todas esas comprobaciones debes de mirar cual se adapta a tus necesidades.

Como nota aparte, te digo que las peticiones javascript pueden ser manipuladas por el usuario, asi que no estaria de mas que guardaras alguna comprobacion de tiempo en el servidor, para evitar que te envien peticiones falsas.

Si no tienes problemas con el trafico de tu pagina podrias poner el contador de actualizacion en pocos segundos, como por ejemplo 10 segundos.
__________________
http://www.roglastudios.es

Última edición por Dalam; 21/04/2014 a las 11:51

Etiquetas: tiempo, usuario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:40.