Ver Mensaje Individual
  #5 (permalink)  
Antiguo 26/02/2014, 09:57
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años
Puntos: 320
Respuesta: Cómo reforzar mi código de sesiones

Cita:
1. Evitar que un usuario entre con la misma cuenta de otro.
Esto en si no es fácil de hacer, pero hay una solución muy buena que es la que implemento google con gmail. Esta implementacion hace que los puntos 2 y 3 que preguntas no sean necesarios.

La idea es la siguiente:
1-> Tener una tabla temporal en la bd de sessiones donde almacenas todos los datos del visitante (ip, dispositivo, sistema operativo, hora de logueo, ultimo_accesso, ultima_seccion_vista, ID_SESSION) el id_session sera el identificador de la session, o su nombre.
2-> Cuando un tipo accede a la web verificas si ya esta logueado, para eso verificas que la sesion exista y ademas, que esta sesion este en la tabla de la base de datos, si no esta, la eliminas y rediriges al login.
3-> Cuando el tipo se loguea, creas una sesion nueva, guardas los datos en la tabla de la base de datos y especificas que la sesion NO EXPIRE NUNCA (eso responde al punto 2) de esta forma el tipo quedara con el accesso activado hasta que se desloguee.
4-> Al hacer un logout destruyes la sesion y la borras de la bd.
5-> El usuario logueado debe de tener un panel donde ver desde donde esta logueado y poder desde alli, eliminar las sesiones. Con esto permites que el tipo se loguee desde su celular, su tablet, su notebook, su pc de escritorio, o desde una pc publica en simultaneo, si el tipo se olvida la cuenta abierta en una pc publica, o detecta que alguien ha ingresado (viendo las sesiones registradas) puede borrarlo inmediatamente, cambiar su contraseña y hasta enviarte una notificacion.

Ese es el sistema mas seguro y flexible que conozco, no obstante no es el unico y hay muchas tecnicas para lograr este efecto.

Dependiendo del servidor, podrias usar Memcache en lugar de una tabla en la base de datos, de esta forma si alguien ataca tu base de datos no obtendra ninguna info de las sesiones, aunque el consumo de ram crece de forma permanente junto con la cantidad de logins. Si tu sistema es en tiempo real, esta es la mejor opcion ya que es cientos de veces mas rapida que la anterior, pero si tu sistema es administrativo y por ende tiene poca interaccion (no hay chats, no hay intercambio de informacion constante) lo mejor es guardar en una base de datos para no saturar el servidor.


NOTA: Las sesiones usan cookies para propagarse, asi que usando sesiones, estás implícitamente usando cookies que almacenan el identificador de la session. (esto responde la duda 3)
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios