Foros del Web » Programando para Internet » PHP »

Limitar el tiempo de estancia

Estas en el tema de Limitar el tiempo de estancia en el foro de PHP en Foros del Web. Veréis, me han encargado el realizar una aplicación para realizar exámenes on-line, por lo que necesito que el tiempo que pueda estar cada usuario viendo ...
  #1 (permalink)  
Antiguo 17/03/2005, 14:29
 
Fecha de Ingreso: marzo-2005
Mensajes: 10
Antigüedad: 19 años, 1 mes
Puntos: 0
Limitar el tiempo de estancia

Veréis, me han encargado el realizar una aplicación para realizar exámenes on-line, por lo que necesito que el tiempo que pueda estar cada usuario viendo la página sea limitado. ¿Cómo hago eso? Cada usuario se identifica en un formulario. Dispongo de bases de datos para hacerlo, el tema del registro y todo eso lo tengo claro. Sólo necesito que me digais cómo hago para limitar el tiempo de estancia de cada usuario. Muchas gracias por adelantado.
Pepotis
  #2 (permalink)  
Antiguo 17/03/2005, 15:23
 
Fecha de Ingreso: marzo-2005
Mensajes: 10
Antigüedad: 19 años, 1 mes
Puntos: 0
En javascript se puede

He visto que con la funcion settimeout() de JavaScript si es posible, pero a mí me gustaría hacerlo en un lenguaje servidor, para más seguridad, a ver si alguien me puede ayudar.
  #3 (permalink)  
Antiguo 17/03/2005, 17:35
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 9 meses
Puntos: 102
Bueno, como lo que quieres es que el tiempo que la página SEA VISIBLE esté limitado... no depende de PHP sino de JavaScript... recuerda que PHP es lenguaje del lado del servidor, por lo que una vez entregando el HTML necesario, quedará fuera de sus manos...

Lo que puedes hacer es una combinación; imprimes tu página con una función para que se recargue en cierto tiempo, luego manejando Base de Datos ó Sesiones haces una comparación de fecha/hora... Si buscas en el foro podrás encontrar algo de ésto último.

Suerte!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #4 (permalink)  
Antiguo 17/03/2005, 20:40
Avatar de jpvilar  
Fecha de Ingreso: febrero-2005
Ubicación: Buenos Aires - Argentina
Mensajes: 128
Antigüedad: 19 años, 3 meses
Puntos: 1
mmm... lo que se me ocurre es que setees una variable en la session con time(); cuando se cargó la página y luego crees una función que compare time(); actual con el seteado en la session, algo así:

session_start();
$inactivo = "20"; // tiempo en segundos de permanencia en la página
$hora_actual= time();
$diferencia = $hora_actual - $hora; // $hora es la variable de session
if ($diferencia > $inactivo) {
$_SESSION['login'] = "";
}
if ($_SESSION['login']=="") { //$_SESSION['login'] tiene valor 1 cuando se loguea e inicia la session
header ("Location: adondeloquierasmandar");
exit;
}


Cuando cambias de página le pedis que setee la variable $hora con el time(); actual y vuelve a empezar a correr el tiempo de 0.
La recarga de la página la podés hacer con un refresh de html o con un javascript ...
Espero te sirva ... saludos
__________________
JuanP
QUIEN NO SE EQUIVOCA NO APRENDE ...
QUIEN NO APRENDE SE EQUIVOCA ... PERO NO APRENDE
  #5 (permalink)  
Antiguo 18/03/2005, 08:23
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
El detalle de "recargar la página" para hacerle saber a "PHP" e informarle de que el cliente sigue ahí conectado y lleva tanto tiempo .. En principio debería controlarse no recargando la página en si .. sino un "iframe/frame" oculto (al estilo técnicas de "Remote Scripting" si se desea un uso "transparente" de esa funcionalidad.

De todas formas .. eso sobrecargará el servidor con tanta petición .. No es la mejor solución resolverlo en PHP .. Pero si que puedes con PHP "validar" cuanto tiempo tardó y así decidir si superó el tiempo asignado (usando sesiones como el ejemplo que propone jpvillar) .. Si quieres que la "página" se "cierre" o se dé un aviso de que su tiempo expiró .. tendrás que usar javascript para tal fin. Eso + la validación última en PHP .. podrías solventar el problema de forma "usable" (con el tema de javascritp) y segura (con las sesiones y su validación en PHP).

Un saludo,
  #6 (permalink)  
Antiguo 18/03/2005, 08:38
 
Fecha de Ingreso: mayo-2004
Ubicación: Managua, Nicaragua
Mensajes: 281
Antigüedad: 20 años
Puntos: 0
jpvilar es un método un poco más seguro, debido a que el cliente puede atrasar la hora de la máquina y eso no sería conveniente.
__________________
Julio Hernández
  #7 (permalink)  
Antiguo 18/03/2005, 08:51
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 jchernandez
jpvilar es un método un poco más seguro, debido a que el cliente puede atrasar la hora de la máquina y eso no sería conveniente.
Para eso estaría la validación final PHP que es la que debe mandar sobre el sistema en sí .. El "detalle" de usar javascript tan sólo es a nivel de "usabilidad" .. Si se le informa al usuario que tiene tanto tiempo .. el verá si se pasó o no .. de todas formas la aplicación ya le dirá en cuanto envie su "formulario"...

Un saludo,
  #8 (permalink)  
Antiguo 18/03/2005, 15:24
 
Fecha de Ingreso: marzo-2005
Mensajes: 10
Antigüedad: 19 años, 1 mes
Puntos: 0
Muchas gracias a todos, veréis, respecto a lo que decís de hacerlo por sesiones... Ya lo había penssado, pero piensa que el usuario podría borrar las cookies, y con ellas el identificador de sesión, otro tema es que la persona sólo puede entrar una sola vez, así que creo que haré lo siguiente:
El timeout lo hare son un settimeout() de JavaScript, pero obligaré al usuario a tener activado JavaScript no dejándole cargar la página de lo congrario (etiqueta NOSCRIPT), cuando entre un usuario, en la base de datos se registrará su entrada, prohibíendole volver a entrar, de esta manera, me ahorro la posibilidad de que el usuario haga un reload para reiniciar el timeout. ¿Qué os parece?
  #9 (permalink)  
Antiguo 18/03/2005, 15:32
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Debes usar sesiones .. por tu seguridad ..

Para eso ya validas la existencia y valor de tus variables de sesión .. SI ese usuario elemina tu SID (si es que lo propagas en cookies) .. Pues es sintoma que .. o tiene problemas con cookies o está intentando adulterar la aplicación ..

A veces es necesario acotar el tema .. y poner reglas. NO se puede hacer algo que cubra a todos los gustos y problemas de los usuarios .. Si lo avisas no tendras problemas.

Cita:
cuando entre un usuario, en la base de datos se registrará su entrada, prohibíendole volver a entrar, de esta manera, me ahorro la posibilidad de que el usuario haga un reload para reiniciar el timeout. ¿Qué os parece?
Insisto .. eso ya lo puedes controlar con las sesiones .. Lo mismo que piensas "obligar" a que tenga javascript activado tu usuario .. es mejor decirle también que tenga activado el uso de cookies (por lo menos que autorize la que va a crear tu sitio por la propación del SID en tu uso de sesiones).


Un saludo,
  #10 (permalink)  
Antiguo 19/03/2005, 04:39
 
Fecha de Ingreso: marzo-2005
Mensajes: 10
Antigüedad: 19 años, 1 mes
Puntos: 0
Ok, entonces por sesiones, pero, ¿Cómo puedo evitar que el usuario borre el SID?¿Hay otra manera de propagar el SID más segura que por cookies?Muchísimas gracias, me estáis ayudando mucho. Para daros más datos, la aplicación tiene que servir para realizar exámenes sencillos on-line
  #11 (permalink)  
Antiguo 21/03/2005, 06:35
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
La manera segura de propagar el SID es por cookies, justamente por el URL es lo menos seguro ..

Lee este documento si quieres saber por qué lo comento:
http://www.acros.si/papers/session_fixation.pdf

¿Por qué temes que te "borren el SID"? .. Tu lo que vas hacer es validar primeramente la existencia de tus variables de sesión .. Si no existen (si el SID es adulterado/borrado ... o no se propaga por otro problema) .. NO continuas ejecutando tu aplicación (no registras tu examen .. .. etc). Así de simple!.

Un saludo,
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 23:57.