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