Ver Mensaje Individual
  #2 (permalink)  
Antiguo 29/03/2005, 10:29
Cluster
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
Sobre el tema de gestionar temas de "concurrencia" (el hecho de que una "cuenta" de usuario no se simultánemante en más de un cliente ...), en principio debes usar algún campo de tu BD (o donde gestiones tus usuarios) a modo de "flag" para guardar un "1" o "0" para identificar que esa "cuenta" ya se hizo login .. a su vez cuando salga del sistema cambiar ese campo "flag" a 0 para liberar dicha cuenta. Eso sería todo si el usuario saliese bien del sistema (por donde se le indique) .. pero como esto no suele suceder siempre (un usuario puede "abandonar" el sistema sin salir correctamente ..) lo que se suele hacer es gestionar ese "flag" (campo) tipo fecha, registrando la fecha de ingreso y considerando un tiempo como de "inactividad" para identifiar a un usuario que no ha interactuado con el sistema en cierto tiempo (por ende a cada "movimiento" de página/script se ha de ir actualizando dicho campo con la fecha actual).

En este caso .. no se trataría de "sacar" del sistema al usuario/cuenta que hizo login en por primera vez por el segundo .. sino de no permitir el acceso a esa cuenta hasta que el usuario 1 no salga del sistema o pase el tiempo que se considere como inactividad. Bajo ese "flag" puedes dar el aviso y controlar para hacer el login o no pues ese es el campo que revisarías al hacer nuevo "login" en el sistema considerando fechas actuales y la que estimes oportuno como "inactivo".

Mas o menos es la misma técnica que usan los sistemas de control de "usuarios activos" (ejemplo tienes en las FAQ's de este foro PHP) para calcular quien se considera que está en el sistema y quien no (de tus usuarios).


El tema de la duración de la sesión .. en principio lo define la directiva session.gc_maxtimelife (de tu PHP.ini) pero vá directamente ligado a como propagues el SID (Identificador Único de sesión) pues se puede hacer por cookies o por el URL .. Si lo haces por cookies, el valor de expiración de esta tambien influye en dicho tiempo máximo de duración de una sesión.

No sé si estás confundiendo las sesiones (www.php.net/session) con cookies .. pero no es lo mismo. Las sesiones estan diseñadas para manterner datos por el transcurso de páginas que mueves de un sitio consecutivamente .. No como una cookie que se usa para mantener información para tu "sitio" siempre y cuando entres desde ese mismo PC/navegador pese que entres y salgas del mismo. (independiente de donde físicamente se guarde la información en sí de una cookie/sessión).

Cita:
si el usuario cierra el navegador, y lo vuelve a abrir en el sitio, quiero q no aparezca mas como logueado
Si trabajas con sesiones, propagando el SID en cookies (con tiempo de expiración de estas 0) .. si cierras todas las ventanas del navegador de tu sitio .. no deberías de retomar la sesión nuevamente ("logueado") pues el SID muere con la cookie (no la sesión pues lo define session.gc_maxtimelife) pero si el "enlace" o "vinculo" entre ese "cliente" y el archivo de sesión creado en el servidor.


Un saludo,