<div dir="ltr">Hola Leo !! no he buscado clases ahí, sólo ejemplos por la web, aunque la base fue uno de los tuyos.<div><br></div><div>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...</div><div><br></div><div>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....</div><div><br></div><div>Con .htaccess nunca busqué nada, me parecía que era algo de tipo rústico...no sé....se utiliza eso?</div><div><br></div><div>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</div><div><br></div><div>Trataré de ser más gráfico: </div><div>_Usuario <b>A</b> se logueó en máquina<b> X </b>y trabajó normalmente.</div><div>_Luego de un tiempo, Usuario<b> A </b>se va de la máquina<b> X </b>sin cerrar sesión (porque se olvidó o lo que sea).</div><div>_Llega Usuario<b> B </b>y trabaja en máquina<b> X </b>con la sesión de Usuario<b> A </b>(intencionalmente o no, sigue utilizando la sesión que estaba activa).</div><div>_Usuario<b> A </b>vuelve y<b> </b>ve máquina<b> X</b> ocupada e intenta loguearse en máquina<b> Z</b>. (desconoce que el Usuario <b>B</b> está utilizando su sesión)</div><div>_En máquina<b> Z</b>, el sistema advierte a Usuario<b> A </b>que ya hay una sesión iniciada en otra máquina (recordá Leo que está activa la sesión de máquina<b> X </b>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.</div><div>_Usuario<b> A </b>decide eliminar esa sesión (de máquina <b>X)</b> para poder loguearse ahora en máquina <b>Z </b>y poder continuar su trabajo.</div><div>_Usuario <b>B</b>, que estaba cargando datos en máquina <b>X</b> con la sesión de Usuario <b>A</b>, 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.</div><div><br></div><div>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.</div><div><br></div><div>É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ó.</div><div> </div><div>Si tenés tiempo, te paso el script de autenticación que escribí.</div><div><br></div><div>Bueno, gracias, saludos !</div><div><br></div><div><br></div><div><br></div><div class="gmail_extra"><br><div class="gmail_quote">El 15 de octubre de 2014, 17:10, 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>
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 que te deje<br>
logueado aunque cierres el navegador, pero sí que configuran como<br>
parámetro la cantidad de minutos que querés que dure la sesión.<br>
<br>
Por otra parte, no sé si es buena idea que los login duren mucho<br>
después de demasiada inactividad... pero todo depende de qué tan<br>
importantes sean los datos a los que se acceden.<br>
<br>
Una autentificación tipo .htaccess por ejemplo no se desloguea nunca<br>
(salvo que cierres el navegador) y puede combinarse con un 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 de hecho todos<br>
estamos buscando todo lo contrario: echar del sistema al usuario para<br>
prevenir robos de sesiones.<br>
<br>
Me llamó la atención lo de "evitar pérdida de datos" al iniciar sesión<br>
desde otro equipo. Qué estás guardando en la sesión que no vale la pena<br>
perder? No debería haber nada ahí que no sea estrictamente volátil...<br>
<br>
Saludos!<br>
<br>
<br>
El mié, 15-10-2014 a las 12:05 -0300, Ariel Fernández escribió:<br>
<div><div class="h5">> Buenas, alguien implementó correctamente y con éxito algún sistema de<br>
> gestión de sesiones por cookies con verificación de 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 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 base de<br>
> datos al iniciar una sesión, y si alguien intenta ingresar con mismos<br>
> datos desde otra máquina, será alertado y se le dará la opción de<br>
> finalizar la otra sesión, pero sólo si no la están utilizando para<br>
> evitar posible pérdida de datos. Quisiera permitir además, que se<br>
> recuerde la sesión durante todo el día o hasta que hagan logout, por<br>
> más que se haya cerrado el navegador. Y el tema es que no logro volver<br>
> a cargar la sesión y reutilizarla. Hay tantos parámetros de php que<br>
> intervienen (como session.cookie_lifetime, session.use_cookies,<br>
> session.gc_maxlifetime, session.gc_probability, session.cache_limiter<br>
> etc etc) que tal vez estoy ocasionando alguna contrariedad. 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 una mano,<br>
> una pista, orientarme un poco aunque sea... estaré agradecido.<br>
><br>
><br>
> Saludos<br>
> Ariel<br>
</div></div>> _______________________________________________<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>
<span class="HOEnZb"><font color="#888888"><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>
</font></span></blockquote></div><br></div></div>