Foros del Web » Programando para Internet » PHP »

Usuarios online en una web

Estas en el tema de Usuarios online en una web en el foro de PHP en Foros del Web. Hola a todos, Quiero hacer un sistema de usuarios online para mi web y he pensado un metodo pero hay un detalle que me impide ...
  #1 (permalink)  
Antiguo 16/11/2006, 12:26
 
Fecha de Ingreso: diciembre-2005
Ubicación: BCN
Mensajes: 165
Antigüedad: 18 años, 4 meses
Puntos: 2
Usuarios online en una web

Hola a todos,

Quiero hacer un sistema de usuarios online para mi web y he pensado un metodo pero hay un detalle que me impide pnerlo en practica:

Vereis, cundo el usuario se loguea y se crean los cookies hago un UPDATE que le añade un 1 en la base de datos para indicar k esta online.

El problema biene porque si las cookies no son borradas antes de salir del navegador...ese usuario sigue estando conectado...y lo mismo pasa si directamente cierra el navegador...el 1 sigue estando ahi.

Haber si podeis decirme alguna forma para que al cerrar el navegador se procese algun codigo para actualizar el numero 1 a 0.

Muchas gracias y saudos,
  #2 (permalink)  
Antiguo 16/11/2006, 15:06
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
una forma podría ser guardar el momento de último acceso del usuario.
Cada cierto tiempo, te encargás de eliminar aquellas sesiones 'activas' según la base de datos, pero con un tiempo de último acceso muy grande (por ejemplo, más de 15 minutos)


Saludos.
  #3 (permalink)  
Antiguo 17/11/2006, 00:12
 
Fecha de Ingreso: diciembre-2005
Ubicación: BCN
Mensajes: 165
Antigüedad: 18 años, 4 meses
Puntos: 2
lo probare pero no era el sistema que buscaba.

De todas formas gracias y haber si alguien sabe otra forma.

Saludos,
  #4 (permalink)  
Antiguo 17/11/2006, 08:27
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Tienes bastantes soluciones al respecto ya implementadas que se basan no en un "flag" (1/0) para indicar el estado sino en un "tiempo" el cual se actualiza a cada iteracción con el servidor y de ahí por otro lado tienes que tener encuenta que si pasado N tiempo (que tu definas) no ha ocurrido iteracción con el servidor .. debes considerar que el usuario "salió" del sistema no por la "puerta" (cerró el navegador .. se le apagó el PC .. vete a saber), es decir, .. no salió por tus "logout" donde puedes cambiar ese estado del "flag" en forma cómoda por un 0 de un 1 que colocastes al hacer tu login el usuario.

En las FAQ's del foro PHP y en las del sub-foro de PHP orientado a objetos tienes implementaciones de la teoría que te comento. También en google si buscas por "usuarios activos".

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 17/11/2006, 08:34
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por pekpon Ver Mensaje
lo probare pero no era el sistema que buscaba.

De todas formas gracias y haber si alguien sabe otra forma.

Saludos,
Realmente no puedes confiar en rutinas javascript para detectar si se cerró el navegador .. Sí, en javascript tienes el evento "onUnload()" .. pero que pasa si se "apaga de golpe" ese PC? a tu rutina javascript no le dará tiempo a ejecutar el "onUnload()" que llama a tu script PHP de "logout" para poner tu flag a 0 .. así que estás con el mismo problema que tienes ahora.

Por eso insisto que aquí hay que considerar un "margen de error" de cuando salió tu usuario del sistema .. el margen de error (tiempo) lo defines tú .. y eso irá en función de que tan "activo" tu usuario puede ser en tu sistema. En algunos sistemas de iteracción con el sistema constante (que mueven muchas páginas .. ) ahí puedes acortar ese tiempo .. en otro tipo de comportamiento de tus usuarios en el sistema tendrás que dar más tiempo.

Por otro lado, tu puedes implementar funciones para "recargar" un frame/iframe (oculto) en el cliente constantemente para "indicar al servidor" que tu cliente sigue ahí .. El margen de error será en ese caso justo el que indiques en esa "recarga" .. (Puede usar técnicas como AJAX para este propósito también).

El caso que estas "recargas" de página (en el frame oculto ...) implican un consumo excesivo de tu "tasa de transferencia" .. asiganda, una sobrecarga de tu servidor HTTP excesiba.

Realmente este ambiente de programación "cliente-servidor" bajo un lenguaje del lado del servidor como PHP y un cliente como un "navegador" no está pensada para mantener conexiones ... De hecho fijate como es el proceso de una "página" que sirve tu servidor HTTP: .. tu la pides bajo un URL dado que apunta a tu servidor y script/página concreta .. este (el servidor HTTP+lenguaje del lado del servidor si corresponde) la procesa y la entrega lo más rápido posible al "cliente" .. El "cliente" (y tu lenguaje del lado del servidor como PHP) ya en ese momento pierte todo control sobre lo que procesó y queda a la "espera" de otra nueva "petición".

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 17/11/2006, 16:05
 
Fecha de Ingreso: diciembre-2005
Ubicación: BCN
Mensajes: 165
Antigüedad: 18 años, 4 meses
Puntos: 2
ok muchas gracias, investigare al respecto.

Saludos,
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 20:41.