tutorial fifa development apps application app web-applications

web applications - fifa - Almacenamiento de detalles de usuario registrados



web application firewall (8)

Almacenar la identificación es la mejor práctica en la mayoría de los casos. Una razón importante para esto es la escalabilidad. Si almacena el objeto de usuario (o cualquier entidad de la base de datos, en lugar de solo sus ID), se encontrará con problemas para expandir la cantidad de servidores que sirven su sitio. Para obtener más información, google para "arquitectura de nada compartida".

Al crear una aplicación web, y digamos que tiene un objeto Usuario que denota un único usuario, ¿cuál cree que es la mejor manera de almacenar que el usuario ha iniciado sesión?

Dos maneras en las que he pensado han sido:

  • Almacenado el id de la base de datos de usuario en una variable de sesión
  • Almacenado el objeto de usuario completo en una variable de sesión

¿Alguna sugerencia mejor, algún problema con el uso de las formas anteriores? Tal vez problemas de seguridad o problemas de memoria, etc., etc.


Creo que depende de qué plataforma estés usando. Si está utilizando ASP.net, entonces definitivamente analizaría la clase FormsAuthentication y todas las funciones integradas (y ampliables) allí que puede usar para almacenar la configuración de usuario que ha iniciado sesión.


Guardo al usuario en la sesión, por lo general. El problema no puede cambiar hasta que el problema de inicio de sesión se pueda resolver reemplazando el objeto en la sesión con una nueva copia después de haber realizado los cambios.


Nuestro objeto de usuario es bastante liviano, así que optamos por almacenarlo en una variable de sesión. No estoy seguro si eso es más eficiente, pero hasta ahora está funcionando muy bien.


Por razones de seguridad, generaría (ya sea un GUID o RNG criptográficamente seguro) un ID de sesión y una tabla que simplemente mapea los ID de sesión con los ID de usuario. Luego, solo almacena la ID de la sesión en sus cookies, y haz que actúe como un proxy para la identificación del usuario.

|Session |UserID |
|--------+-------|
|a1d4e...+ 12345 |
|--------+-------|
|c64b2...+ 23456 |
|--------+-------|

Con esto, nadie puede hacerse pasar por otro usuario adivinando su ID. También le permite limitar las sesiones de los usuarios, por lo que tienen que iniciar sesión cada cierto tiempo (dos semanas es lo habitual). Y si desea almacenar otros datos sobre su sesión, puede agregarlo a esta tabla.


Recomiendo almacenar la identificación en lugar del objeto. La desventaja es que debes acceder a la base de datos cada vez que quieras obtener la información de ese usuario. Sin embargo, a menos que cada milisegundo cuente en su página, el rendimiento no debería ser un problema. Aquí hay dos ventajas:

  1. Si la información del usuario cambia de alguna manera, entonces no estará almacenando información desactualizada en su sesión. Por ejemplo, si un administrador le concede privilegios adicionales, estos estarán inmediatamente disponibles sin que el usuario tenga que cerrar la sesión y luego volver a iniciar sesión.

  2. Si la información de su sesión está almacenada en el disco duro, entonces solo puede almacenar datos serializables. Entonces, si su objeto de usuario contiene algo como una conexión de base de datos, un socket abierto, un descriptor de archivo, etc., esto no se almacenará correctamente y tampoco se podrá limpiar correctamente.

En la mayoría de los casos, estas preocupaciones no serán un problema y cualquiera de los enfoques estaría bien.


Solo recuerde que si almacena todos los atributos del usuario (esto se extiende a los permisos) en la sesión, cualquier cambio en el usuario no tendrá efecto hasta que inicie sesión de nuevo.

Personalmente, guardo el nombre y la identificación para una referencia rápida, y busco el resto cuando sea necesario.


Almacenaba un valor hash de la identificación del usuario y de la identificación de la sesión y luego la emparejaba en una tabla de sesiones en la base de datos. De esta forma, será más difícil falsificar los datos de la sesión. Podría comprobar el IP también como un cheque adicional.

No estoy seguro de que me gustaría confiar en un ID de usuario almacenado en una variable de sesión y confiar en que era ese usuario, ya que podría ser alterado con bastante facilidad y obtener acceso como otro miembro