Sesion, modificar una tabla cuando se cierra el navegador

278 views
Skip to first unread message

eycopia

unread,
Sep 1, 2011, 11:18:14 PM9/1/11
to CodeIgniter-spanish
Hola, estoy realizando en un aplicativo la autenticacion de los
usuario y todo me ha ido de maravilla.
Pero dentro de los requerimientos que tengo es que un usuario solo
puede ingresar desde un único lugar(navegador) pensé que eso lo hacia
la tabla de sesión de codeigniter pero no es así.

Entonces como solución agregue un campo login en mi tabla users donde
almaceno un estado si el usuario a hecho o no sesión, este campo es
0(cero) si no hay sesión y 1 si lo hay. Este método funciona bien a no
ser que el usuario cierra el navegador.

Entonces supuse que tengo que ingresar código en la libreria de
session, buscar a sess_expire_on_close para agregar ahi el código de
actualización a la tabla user.
Y no se si colocar el codigo después de la linea 663

$expire = ($this->sess_expire_on_close === TRUE) ? 0 : $this-
>sess_expiration + time();

aunque la verdad no entiendo lo que hace XD, pero creo también que
envía datos a algún otro método.

También quise ponerlo en la linea 398, dentro del if, pero lo hice y
no me salio.

Ahora que puedo hacer.



Nino Simeon

unread,
Sep 1, 2011, 11:27:06 PM9/1/11
to codeignit...@googlegroups.com
Y si amarras la sesion con el SESSION_ID(Es unico) y cuando intente logear en otra pc realizas la comparacion al ver que no coincide le dara FAIL (:..

Nino Simeon

unread,
Sep 1, 2011, 11:30:56 PM9/1/11
to codeignit...@googlegroups.com
Tendrá el siguiente formato y no te preocupes que por defecto se carga cuando estas trabajando con sesiones en el CI.'session_id' => string '90ed64493e492cd717f84c391957f29f' (length=32). Lo que tednrias que hacer es almacenar esa session_id en una tabla para proceder con la comparacion.

Jimmy Collazos || acido || cuatroxl.com

unread,
Sep 2, 2011, 3:42:28 AM9/2/11
to codeignit...@googlegroups.com
La gente de Megavideo también intento algo parecido, para que no se pudieran conectar dos personas con una misma cuenta... Y no lo consiguieron.

Lo único que hacen es guardar las IP desde dónde se conectan y en cuanto detectan más de 6 IP distintas te resetean la contraseña.


--
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::: J i m m y  C o l l a z o s :::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

eycopia

unread,
Sep 2, 2011, 1:57:29 PM9/2/11
to CodeIgniter-spanish
Gracias, amigo Nino lo que me recomiendas es que guarde el id de
Sesion en la tabla de usuario, si es asi creo que seria mas de lo
mismo, porque el problema que tengo al cerrar el navegador tambien se
cierre la sesion.

En ese sentido e invertido mi solucion, ahora ya no guardo nada en la
tabla de usuario, lo que hago es ahora escribir el id de usuario en la
tabla de sesion y me funciona bien, pero tengo el mismo problema pero
desde otra perspectiva, los datos de la tabla sesion no se eliminan
cuando la sesion expira o se cierra el navegador.

Nino Simeon

unread,
Sep 3, 2011, 3:01:29 AM9/3/11
to codeignit...@googlegroups.com
@eycopia si almacenas el session_id este es unico por sesion. Me explico es un valor aleatorio el cual se genera por cada 'LOGEO' por ende asumamos este caso:
  1. Te logeas en Google chrome este te genera un SESSION_ID.
  2. Te logeas en M. Firefox este te va a generar otro SESSION_ID (En tu codigo debe realizarse la comparativa si ya existe una sesion anterior).
Esto es asumiendo que intente logearse en 2 lugares distinto al mismo tiempo con la misma cuenta. También considera esto si lo asocias a la IP y aplicas el concepto en una LAN en ambas podras logearte ya que ambas PC's de la misma LAN cuentan con la IP PUBLICA similar. 
Te alcanzo material que te pueda servir -> http://codeigniter.com/user_guide/libraries/sessions.html <- lee esta parte SAVING SESSION DATA TO A DATABASE. 

Nino Simeon

unread,
Sep 3, 2011, 3:05:46 AM9/3/11
to codeignit...@googlegroups.com
Y si implementas en tu codigo, que cuando haya un 'tiempo de inactividad' se elimine la session. Intenta con ello (:.

Nino Simeon

unread,
Sep 3, 2011, 3:07:08 AM9/3/11
to codeignit...@googlegroups.com
Te alcanzo este último material. Si no te funciona con lo mencionado anteriormente leelo -> http://www.desarrolloweb.com/articulos/1991.php <-

eycopia

unread,
Sep 3, 2011, 12:01:27 PM9/3/11
to CodeIgniter-spanish
Bien, gracias. Pero como veras yo ya estoy trabajando con la tabla
sesion. Y eso no impide que me logee desde dos navegadores por mas que
genere un id diferente en cada sesion. Y el problema reside en que no
esta amarrada a la tabla de usuario y esa fue mi primera solucion
hacer un estado login en la tabla usuario, asi cuando se logea tiene
un estado y cuando no se logea otro estado.

Bien pasa que si el usuario se le ocurre cerrar el navegador por x
motivos, la tabla session puede limpiarse pero el estado de logeado
del usuario no, por eso aplico el otro concepto, poner el id del user
en la tabla session asi cuando expire la session el registro entero se
borra. Esto funciona hasta cierto punto, pero ayer cuando realize mis
practicas a pesar de que puse tiempo de expiracion 10 minutos el
registro no se borro hasta hoy y esto es un problema.

<<P431i7o>>

unread,
Sep 3, 2011, 1:46:42 PM9/3/11
to codeignit...@googlegroups.com
no seria mas sencillo que el que entra, le eche al que ya esta?
Saludos Cordiales
---------------------------------------------
Pablo F.Ruiz Diaz Rios
Linux Registered user #459685
Desarrollo Web con tecnologias de PHP, MySQL, AJAX (aunque tecnicamente ajax no es una nueva tecnologia,sino, la combinacion de varias)
pablito.federico [en] gmail punto com

UN MENSAJE PARA QUE PODAMOS CUIDAR NUESTRA RED:

     Compartimos mensajes. Así que POR FAVOR, si vas a realizar un reenvío de este correo o cualquier otro recibido, BORRA mi dirección de correo y todas las direcciones de correo que aparezcan en los textos.
    Proteje las direcciones de  tus amigos y la mía, enviando solo como CCO o BCC, Con copia oculta y NO PARA, ni CC: para evitar que usen nuestras direcciones y recibir correos no deseados, virus, spam etc.




edherrera

unread,
Sep 4, 2011, 11:55:47 AM9/4/11
to CodeIgniter-spanish
Concido con quien comenta que la solución mas sencilla es guardar el
id de la sesion.
Reply all
Reply to author
Forward
0 new messages