Bienvenido a datoweb.com!! En este foro podrás encontrar ayuda sobre diseño y desarrollo web en general. Si quieres formar parte de esta comunidad para pedir ayuda o colaborar ayudando a otros usuarios del foro solo tienes que registrarte desde el siguiente enlace: Registrarse en el Foro

Como actualizar la db si el usuario cierra el nabegador

Hola que tal como puedo hacer una actualización de datos verán lo que quiero decir es:
hacer una actualización si el usuario cierra el navegador entonces que el status de la tabla r_web tabla r_users dentro de users tengo un campo online y quiero al cerear el navegador sea 0
0
Puntos
2272
Visitas
7
Resp
Por fc2014 hace 114 meses
Experto
Respuesta #1
Hola fc2014.

Bueno, según tengo entendido, o lo que he leído eso no es posible. Al menos con PHP, javascript y eso.. No se si alguna otra tecnología lo permita. Pero si lo que tú quieres hacer es que se cambie el estado de un usuario de "conectado" a "desconectado" lo puedes hacer con PHP usando una especie de cronómetro que se reinicia cada vez que el usuario actualice una página o navegue por las secciones de tu web. Aquí hay un tema que da la idea.

Este método no va a reconocer si el usuario cierra la ventana o no, lo que hará será medir el tiempo de inactividad desde su última actividad. Cuando los tiempos se igualen, el servidor pensará "éste usuario ya se fue, lo voy a desconectar". ¿Por qué no se puede cerrando el navegador? Bueno porque si cierras el navegador se cierra el contacto de cliente-servidor, no habrá quien le diga al servidor "cerré, chao". No se si alguna de las tecnologías más avanzadas reconoce eso..

Bueno, la idea consiste en que la tabla de usuarios tenga un campo que contenga un tiempo, yo lo llamo "timer" o "temporizador". El valor por defecto debería ser 0. Cuando el usuario inicie sesión, mediante un UPDATE, el valor de ese campo debería cambiar a
time();
Y usando un código, que va en funciones.php (para que abarque a todas las páginas) se encargará de actualizar ese tiempo para decirle al servidor "no me desconectes, sigo aquí", eso en caso de que el usuario esté navegando en nuestra web. Si el usuario no hace nada por el tiempo que tú especifiques, o si cierra el navegador y pasa el tiempo que especificaste, el servidor debería desconectarlo.

Éste es el código que elaboré, aquí además de verificar el tiempo, también se encarga de cambiar el estado (status) de 1 a 0. Que es de conectado a desconectado. Y si el status es 0, cuando el usuario realice actividad en la página, le cerrará la sesión y será como si no estaba conectado.
// CONNECTION TIME
$timeLimit = 30; // minutes
$time = time() ;
$limit = $time-$timeLimit*60 ;
$timeLimitSQL = sprintf("UPDATE user SET status=0, timer=0 WHERE timer < %s", GetSQLValueString($limit, "int"));
$timeLimitQUERY = mysql_query($timeLimitSQL);
$statusCheckSQL = sprintf("SELECT * FROM user WHERE id=%s", $_SESSION["id"]);
$statusCheckQUERY = mysql_query($statusCheckSQL);
if($statusCheck = @mysql_fetch_array($statusCheckQUERY)) {
	if($statusCheck['timer'] > $limit) {
		$UpdateSQL= sprintf("UPDATE user SET status=1, timer=%s WHERE id=%s", 
					GetSQLValueString($time, "int"),
					GetSQLValueString($_SESSION["id"], "int"));
		mysql_query($UpdateSQL);
	} else if ($statusCheck["timer"] < $limit) {
		$timeLimitQUERY;
		header("Location:".$urlWeb."/includes/destroy.php"); // Cerrar sesión
	}
}
return;

Normalmente lo coloco al final de todo el funciones.php.
Bueno, usa y acomoda ese código a tu gusto. (-:

Si tu duda no se trataba de ésto. Pues, como dije al principio. Creo que no es posible, no se XD
0
Puntos
Por Jose hace 114 meses
Experto Sitio web
Respuesta #2
Voy a probar que onda si me funciona
0
Puntos
Por fc2014 hace 114 meses
Experto
Respuesta #3
Jose dijo:
Hola fc2014.

Bueno, según tengo entendido, o lo que he leído eso no es posible. Al menos con PHP, javascript y eso.. No se si alguna otra tecnología lo permita. Pero si lo que tú quieres hacer es que se cambie el estado de un usuario de "conectado" a "desconectado" lo puedes hacer con PHP usando una especie de cronómetro que se reinicia cada vez que el usuario actualice una página o navegue por las secciones de tu web. Aquí hay un tema que da la idea.

Este método no va a reconocer si el usuario cierra la ventana o no, lo que hará será medir el tiempo de inactividad desde su última actividad. Cuando los tiempos se igualen, el servidor pensará "éste usuario ya se fue, lo voy a desconectar". ¿Por qué no se puede cerrando el navegador? Bueno porque si cierras el navegador se cierra el contacto de cliente-servidor, no habrá quien le diga al servidor "cerré, chao". No se si alguna de las tecnologías más avanzadas reconoce eso..

Bueno, la idea consiste en que la tabla de usuarios tenga un campo que contenga un tiempo, yo lo llamo "timer" o "temporizador". El valor por defecto debería ser 0. Cuando el usuario inicie sesión, mediante un UPDATE, el valor de ese campo debería cambiar a
time();
Y usando un código, que va en funciones.php (para que abarque a todas las páginas) se encargará de actualizar ese tiempo para decirle al servidor "no me desconectes, sigo aquí", eso en caso de que el usuario esté navegando en nuestra web. Si el usuario no hace nada por el tiempo que tú especifiques, o si cierra el navegador y pasa el tiempo que especificaste, el servidor debería desconectarlo.

Éste es el código que elaboré, aquí además de verificar el tiempo, también se encarga de cambiar el estado (status) de 1 a 0. Que es de conectado a desconectado. Y si el status es 0, cuando el usuario realice actividad en la página, le cerrará la sesión y será como si no estaba conectado.
// CONNECTION TIME
$timeLimit = 30; // minutes
$time = time() ;
$limit = $time-$timeLimit*60 ;
$timeLimitSQL = sprintf("UPDATE user SET status=0, timer=0 WHERE timer < %s", GetSQLValueString($limit, "int"));
$timeLimitQUERY = mysql_query($timeLimitSQL);
$statusCheckSQL = sprintf("SELECT * FROM user WHERE id=%s", $_SESSION["id"]);
$statusCheckQUERY = mysql_query($statusCheckSQL);
if($statusCheck = @mysql_fetch_array($statusCheckQUERY)) {
	if($statusCheck['timer'] > $limit) {
		$UpdateSQL= sprintf("UPDATE user SET status=1, timer=%s WHERE id=%s", 
					GetSQLValueString($time, "int"),
					GetSQLValueString($_SESSION["id"], "int"));
		mysql_query($UpdateSQL);
	} else if ($statusCheck["timer"] < $limit) {
		$timeLimitQUERY;
		header("Location:".$urlWeb."/includes/destroy.php"); // Cerrar sesión
	}
}
return;

Normalmente lo coloco al final de todo el funciones.php.
Bueno, usa y acomoda ese código a tu gusto. (-:

Si tu duda no se trataba de ésto. Pues, como dije al principio. Creo que no es posible, no se XD
Hola jose me podras explicar en los comentarios lo que hace esa funcion que no logre comprenderla muy bien
0
Puntos
Por fc2014 hace 114 meses
Experto
Respuesta #4
Hola fc2014. Disculpa la demora.

El código hace lo siguiente: Donde dice //minutes colocarás el tiempo en minutos que desees, ésto es como un límite que va a chequear si un usuario navega o no por la página. Si algún usuario no navega por la página durante X minutos que tú hayas elegido, le cambiará el estado a 0 (Desconectado) y el temporizador lo colocará también en 0 a todos los que hayan sobrepasado el límite de tiempo. Al mismo tiempo, el código irá chequeando el estado del usuario conectado, y verá si el tiempo es mayor al límite o menor. Si el tiempo es mayor, entonces actualizará el temporizador y mantendrá el estado en 1 (Conectado). Y si el tiempo es menor al límite entonces va a redireccionar al usuario a la página PHP de cierre de sesión, que es para que le finalice la sesión.

0
Puntos
Por Jose hace 114 meses
Experto Sitio web
Respuesta #5
Jose dijo:
Hola fc2014. Disculpa la demora.

El código hace lo siguiente: Donde dice //minutes colocarás el tiempo en minutos que desees, ésto es como un límite que va a chequear si un usuario navega o no por la página. Si algún usuario no navega por la página durante X minutos que tú hayas elegido, le cambiará el estado a 0 (Desconectado) y el temporizador lo colocará también en 0 a todos los que hayan sobrepasado el límite de tiempo. Al mismo tiempo, el código irá chequeando el estado del usuario conectado, y verá si el tiempo es mayor al límite o menor. Si el tiempo es mayor, entonces actualizará el temporizador y mantendrá el estado en 1 (Conectado). Y si el tiempo es menor al límite entonces va a redireccionar al usuario a la página PHP de cierre de sesión, que es para que le finalice la sesión.

a una consulta mas esto lo pondria en functiones o en Connexion creo que es lo mismo
0
Puntos
Por fc2014 hace 114 meses
Experto
Respuesta #6
con la función onbeforeunload puedes determinar cuando un usuario cierra el navegador, prueba este código y adaptalo a tu necesidades, si puedes nos cuentas como lo has hecho ;)

aquí tienes la base:
<script type="text/javascript">
window.onbeforeunload = function () {
	
   //Acción a ejecutar cuando cierras el navegador
   window.open("http://www.google.es","venta","");

};
</script>
5
Puntos
Por alber hace 114 meses
Administrador
Respuesta #7
alber dijo:
con la función onbeforeunload puedes determinar cuando un usuario cierra el navegador, prueba este código y adaptalo a tu necesidades, si puedes nos cuentas como lo has hecho ;)

aquí tienes la base:
<script type="text/javascript">
window.onbeforeunload = function () {
	
   //Acción a ejecutar cuando cierras el navegador
   window.open("http://www.google.es","venta","");

};
</script>
Vale alber cuado termine el script te lo muestro como lo hice :)
0
Puntos
Por fc2014 hace 114 meses
Experto
Compartir en facebook
Compartir en twitter
Compartir
Para comentar Inicia sesión o Registrate