[Php-avanzado] sesiones
Leonardo Tadei - Pegasus Tech Supply
leonardot en pegasusnet.com.ar
Vie Oct 17 20:06:32 ART 2014
Hola Ariel,
hay varias cosas que me hacen ruido:
1) Si los usuarios usan el sistema permanentemente, será muy raro que se
desconecte por inactividad, ya que a cada click tenés que estar
actualizando el timestamp de la sesion, para que su vida se estire.
2) Si todo corre en una intranet, por qué simplemente no permitís el
login múltiple? De esta forma si alguien se sienta en otra PC y se logea
de nuevo como en el escenario que describís, ahora está dos veces
logueado y no se "pierde" lo que el usuario que no se logueó está
cargando.
3) las sesiones no se guardan en el navegador, sino en el servidor, así
que cuando decís de "recolección de basura del navegador" estás pensando
fuera del tarro ;-)
4) la autentificación de Apache si sigue y se seguirá usando. No es
rústica, sino que solo soporta usuario y contraseña, así que en ese
sentido es limitada. Sin embargo se puede ampliar con más datos de
perfil, relacionando el usuario del .htaccess con un registro en una
tabla. Tiene como ventaja y como desventaja que los usuarios nunca se
desloguean mientras no cierres el navegador o aprietes un "salir" que
implemente el logout.
5) es incompatible no desloguear nunca a nadie con la seguridad.
6) es incompatible tener control del usaurio logueado y no molestarlo de
vez en cuando pidiéndole que se loguee!
7) el tiempo máximo de vida de la sesión te determina la duración
máxima, independientemente de lo que software haga.
Conciliá las cosas en tu implementación de AAA para este software y
luego veamos los problemas técnicos...
Saludos!!!
El mié, 15-10-2014 a las 21:44 -0300, Ariel Fernández escribió:
> Hola Leo !! no he buscado clases ahí, sólo ejemplos por la web, aunque
> la base fue uno de los tuyos.
>
>
> Mirá, en realidad, al principio me fallaba, luego funcionó bien y creí
> que había sido por el recolector de basura del navegador, que lo había
> configurado mal y me eliminaba los archivos de cookies. Pero resulta
> que cuando instalé la aplicación en otra máquina, manteniendo todas
> las configuraciones de apache y php, el login comenzó a fallar. Me
> detecta que ya hay un usuario logueado (este chequeo lo hace
> verificando el número de sesión en la base de datos, por eso, cuando
> cierran el navegador sin hacer logout, el campo donde almaceno el id
> de la sesión no se limpia y queda con el último usado y es como si
> hubiese una sesión activa). Entonces, el sistema da la opción de
> eliminar la sesión anterior, lo cual no es más que vaciar el campo id
> de la base y hacer otro login. También se podría guardar la IP por
> ejemplo, o ambas cosas...
>
>
> Lo de los minutos, entiendo que no es bueno mucho tiempo, pero no se
> trata de una aplicación online, sino que trabaja en red local, y sería
> molesto tener que loguear a cada rato, además, es un sistema que lo
> utilizan permanentemente por lo cual no tiene mucho tiempo de
> inactividad. Para que te de una idea, el tiempo de la sesión lo
> establecí en 8hs, luego de eso debería cerrarse la sesión...digo
> debería, porque a mí me funcionaba, pero ya veremos....
>
>
> Con .htaccess nunca busqué nada, me parecía que era algo de tipo
> rústico...no sé....se utiliza eso?
>
>
> Lo de "pérdida de datos" es más bien una advertencia que muestro al
> usuario, porque inicialmente lo pensé por el lado de que si un usuario
> inicia sesión en otra máquina, y no cerró la sesión en la máquina
> anterior y alguien la estaba usando, y encima ese usuario la elimina
> automáticamente (borrar el id de sesión de la base), entonces los
> datos que estuvieran cargando ya no podrían guardarse porque el
> sistema se cerrará solo, en el instante que chequee que la sesión fue
> eliminada. No sé si fue claro ésto, puede ser medio confuso. Y tal
> vez tenga que ver con el bolonqui que tengo ahora jeje
>
>
> Trataré de ser más gráfico:
> _Usuario A se logueó en máquina X y trabajó normalmente.
> _Luego de un tiempo, Usuario A se va de la máquina X sin cerrar sesión
> (porque se olvidó o lo que sea).
> _Llega Usuario B y trabaja en máquina X con la sesión de Usuario A
> (intencionalmente o no, sigue utilizando la sesión que estaba activa).
> _Usuario A vuelve y ve máquina X ocupada e intenta loguearse en
> máquina Z. (desconoce que el Usuario B está utilizando su sesión)
> _En máquina Z, el sistema advierte a Usuario A que ya hay una sesión
> iniciada en otra máquina (recordá Leo que está activa la sesión de
> máquina X y en uso) y entonces le da la opción de eliminarla
> automáticamente pero advirtiendo de la posible "pérdida de datos" si
> es que la están utilizando.
> _Usuario A decide eliminar esa sesión (de máquina X) para poder
> loguearse ahora en máquina Z y poder continuar su trabajo.
> _Usuario B, que estaba cargando datos en máquina X con la sesión de
> Usuario A, cuando va a guardar esos datos, el sistema le advierte que
> alguien ha eliminado la sesión y no se pueden guardar los datos. Ahí
> Leo, es donde se "pierden" los datos....no pueden guardarse en
> realidad, porque sólo permito una sola sesión por usuario.
>
>
> Los datos que no se puedan guardar, no es nada grave, creo que es sólo
> una molestia de tener que cargarlos otra vez, nada más. La idea es que
> el sistema sea lo más amigable posible, pero bueno, si no respetan las
> sesiones, creo que mucho no puedo hacer.
>
>
> Ésto es lo que he implementado luego de investigar bastante sobre el
> tema, pero no terminando de entender el tema de las cookies y
> sesiones, y menos ahora que está fallando. Lo que vimos en clase fue
> algo básico, lo entiendo, y me sirvió como base, como te decía al
> principio, pero para implementar algo más completo, es ésto lo que me
> salió.
>
> Si tenés tiempo, te paso el script de autenticación que escribí.
>
>
> Bueno, gracias, saludos !
>
>
>
>
>
>
>
> El 15 de octubre de 2014, 17:10, Leonardo Tadei - Pegasus Tech Supply
> <leonardot en pegasusnet.com.ar> escribió:
> Hola Ariel,
>
> y en qué parte de todo esto estás trabado??
>
> Buscaste clases que se encarguen de AAA por ejemplo en
> www.phpclasses.org ? No recuerdo haberme cruzado con ninguna
> que te deje
> logueado aunque cierres el navegador, pero sí que configuran
> como
> parámetro la cantidad de minutos que querés que dure la
> sesión.
>
> Por otra parte, no sé si es buena idea que los login
> duren mucho
> después de demasiada inactividad... pero todo depende de qué
> tan
> importantes sean los datos a los que se acceden.
>
> Una autentificación tipo .htaccess por ejemplo no se
> desloguea nunca
> (salvo que cierres el navegador) y puede combinarse con un
> perfil de
> usuario más completo vía las variables de entorno
> $_SERVER['PHP_AUTH_USER'] y $_SERVER['PHP_AUTH_PW']
>
> No debe ser sencillo encontrar lo que buscás, porque
> de hecho todos
> estamos buscando todo lo contrario: echar del sistema al
> usuario para
> prevenir robos de sesiones.
>
> Me llamó la atención lo de "evitar pérdida de datos"
> al iniciar sesión
> desde otro equipo. Qué estás guardando en la sesión que no
> vale la pena
> perder? No debería haber nada ahí que no sea estrictamente
> volátil...
>
> Saludos!
>
>
> El mié, 15-10-2014 a las 12:05 -0300, Ariel Fernández
> escribió:
> > Buenas, alguien implementó correctamente y con éxito algún
> sistema de
> > gestión de sesiones por cookies con verificación de
> vencimiento,
> > límite de un usuario por sesión y por máquina ?
> >
> >
> > Porque realmente a mí se me ha complicado bastante y no
> logro
> > encontrar la forma de que funcione como tiene que ser.
> >
> >
> > Mi código verifica el número de sesión que lo almaceno en la
> base de
> > datos al iniciar una sesión, y si alguien intenta ingresar
> con mismos
> > datos desde otra máquina, será alertado y se le dará la
> opción de
> > finalizar la otra sesión, pero sólo si no la están
> utilizando para
> > evitar posible pérdida de datos. Quisiera permitir además,
> que se
> > recuerde la sesión durante todo el día o hasta que hagan
> logout, por
> > más que se haya cerrado el navegador. Y el tema es que no
> logro volver
> > a cargar la sesión y reutilizarla. Hay tantos parámetros de
> php que
> > intervienen (como session.cookie_lifetime,
> session.use_cookies,
> > session.gc_maxlifetime, session.gc_probability,
> session.cache_limiter
> > etc etc) que tal vez estoy ocasionando alguna contrariedad.
> Y tampoco
> > termino de comprender lo de la función session_id(), la cual
> > supuestamente me permitiría reutilizar la cookie.
> >
> >
> > En fin, si alguien ha logrado algo similar y me puede dar
> una mano,
> > una pista, orientarme un poco aunque sea... estaré
> agradecido.
> >
> >
> > Saludos
> > Ariel
>
> > _______________________________________________
> > Lista de correo: Php-avanzado
> > Mensajes a la lista: Php-avanzado en pato2.fi.mdp.edu.ar
> > Administración Web:
> http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
> > Desubscripción:
> php-avanzado-request en pato2.fi.mdp.edu.ar?subject=unsubscribe
>
> --
> Leonardo Tadei
> leonardot en pegasusnet.com.ar
> Web: http://leonardo.tadei.com.ar
> Firma pública:
> http://www.pegasusnet.com.ar/LeonardoTadei-public.key
>
> _______________________________________________
> Lista de correo: Php-avanzado
> Mensajes a la lista: Php-avanzado en pato2.fi.mdp.edu.ar
> Administración Web:
> http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
> Desubscripción:
> php-avanzado-request en pato2.fi.mdp.edu.ar?subject=unsubscribe
>
>
> _______________________________________________
> Lista de correo: Php-avanzado
> Mensajes a la lista: Php-avanzado en pato2.fi.mdp.edu.ar
> Administración Web: http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
> Desubscripción: php-avanzado-request en pato2.fi.mdp.edu.ar?subject=unsubscribe
--
Leonardo Tadei
leonardot en pegasusnet.com.ar
Web: http://leonardo.tadei.com.ar
Firma pública: http://www.pegasusnet.com.ar/LeonardoTadei-public.key
Más información sobre la lista de distribución Php-avanzado