[Php-avanzado] sesiones

Ariel Fernández arielf05 en gmail.com
Mie Oct 15 21:44:16 ART 2014


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
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://www3.fi.mdp.edu.ar/pipermail/php-avanzado/attachments/20141015/1107e1c7/attachment-0001.html>


Más información sobre la lista de distribución Php-avanzado