Una de las características del protocolo Http es que es stateless, es decir, no conserva un estado para ninguna petición que recibe.
Esto significa que el servidor no tiene memoria, es una persona que saludas, te presentas, le dices tu nombre y lo olvidará para la siguiente vez que lo saludes. El servidor no recuerda nada entre peticiones, por lo que no sabe si esa petición ya vino, qué usuario es, cuáles son su datos, etc.
Por otro lado, nosotros usamos un internet que siempre sabe quiénes somos, sabe qué publicaciones debe mostrarnos en facebook, qué cuenta de correo estamos usando y mucho más. La pregunta es, si el protocolo http es stateless, cómo saben todas las páginas que yo estoy usando su sitio, la respuesta es con cookies y sesiones.
Las cookies y sesiones son mecanismos a través de los cuales podemos identificar una petición, con estas estrategias podemos almacenar información de nuestros usuarios que pueda ayudarnos como los productos que ha agregado a un carrito de compras, sus preferencias, si inició sesión o no, y mucho más.
Las cookies son datos que se almacenan en tu navegador, y son enviados al servidor en cada petición que haces del cliente al servidor mismo. Esto significaría, por ejemplo, que cada que llegas con el servidor sin memoria te presentes y le digas toda la información que posiblemente requería de ti.
Las cookies tienen varias limitaciones, por un lado la cantidad de información que puedes almacenar en cookies está limitada por el navegador, por otro lado, el usuario es libre de alterar las cookies como él prefiera, alterando así el funcionamiento de tu aplicación. Por último, si algo sale mal con las cookies, no está en tu control arreglarlo, tendrías que pedirle a tus usuarios que ellos mismos arreglen el problema, a final de cuentas, los datos están en su computadora.
Las sesiones por otro lado, guardan la información en el servidor y no en el cliente, y lo que se envía entre cada petición es un identificador de sesión para cada usuario, a través del cuál puedes obtener los datos que guardaste en el servidor. Esto significaría, por ejemplo, que cuando llegues con el servidor sin memoria le entregues una identificación tuya y él busque entre sus datos toda la información que necesitas saber, en lugar de que tú tengas que decirle todo.
La ventaja de las sesiones es que se almacenan en tu servidor, por lo que puedes guardar mucha más información que en las cookies, además, puedes usar uno de múltiples almacenes para sesiones, desde guardarlas en archivos, usar la memoria RAM, hasta guardar las sesiones en una base de datos especial para este tipo de información.
Además, las sesiones no pueden modificarse desde el cliente, ya que aunque el identificador de una sesión es guardado en una cookie, modificarlo significa que la información del usuario y el usuario ya no están conectados, y esto por sí mismo no presenta un riesgo de seguridad. Por otro lado, almacenar información sensible como el ID del usuario en una cookie puede prestarse a que se modifique y entonces sí exponga a tu servidor a una brecha de seguridad.
Por otro lado, es común que las aplicaciones web encripten las cookies para que estas no puedan ser leídas o modificadas en texto plano, para eso también hay distintas implementaciones con algoritmos de encriptación.
En general, la regla es, no almacenes información sensible o de importancia para tu aplicación en cookies, usa sesiones. Para todo lo demás, usa cookies.
Continuemos.
-
Módulo 1 | 8 clases
Introducción
expand_more-
play_circle_outline
Clase 1
Introducción al Curso Profesional de Backend
-
play_circle_outline
Clase 2
Backend y Frontend
-
play_circle_outline
Clase 3
La especialidad Backend
-
play_circle_outline
Clase 4
Qué veremos en este curso
-
play_circle_outline
Clase 5
Conocimientos previos
-
play_circle_outline
Clase 6
Stack de Tecnologías
-
play_circle_outline
Clase 7
Configurar entorno de trabajo (Windows)
-
play_circle_outline
Clase 8
Configurar entorno de trabajo (MacOS)
-
-
Módulo 2 | 19 clases
Http
expand_more-
play_circle_outline
Clase 1
Cómo funciona un servidor web
-
play_circle_outline
Clase 2
Qué es NodeJS y qué es Express
-
play_circle_outline
Clase 3
El protocolo Http
-
play_circle_outline
Clase 4
Verbos Http
-
play_circle_outline
Clase 5
Http con cURL
-
play_circle_outline
Clase 6
Direcciones web
-
play_circle_outline
Clase 7
Creando nuestro primer servidor
-
play_circle_outline
Clase 8
Express
-
play_circle_outline
Clase 9
Postman
-
play_circle_outline
Clase 10
Recibir datos de la petición
-
play_circle_outline
Clase 11
Datos con POST
-
play_circle_outline
Clase 12
Enviar HTML
-
play_circle_outline
Clase 13
Servir archivos estáticos
-
play_circle_outline
Clase 14
Motores de vistas
-
play_circle_outline
Clase 15
Qué es el caché
-
play_circle_outline
Clase 16
Tipos de caché
-
play_circle_outline
Clase 17
Caché de archivos estáticos
-
play_arrow
Clase 18
Qué son las cookies y las sesiones
-
play_circle_outline
Clase 19
Cookies
-
-
Módulo 3 | 11 clases
Bases de Datos
expand_more-
play_circle_outline
Clase 1
El lenguaje SQL
-
play_circle_outline
Clase 2
Configurando SQLite
-
play_circle_outline
Clase 3
Qué son las bases de datos y por qué las usamos
-
play_circle_outline
Clase 4
Drivers de conexión
-
play_circle_outline
Clase 5
Crear una tabla (Primer consulta)
-
play_circle_outline
Clase 6
Qué es un CRUD
-
play_circle_outline
Clase 7
Insertar registros en la Base de Datos
-
play_circle_outline
Clase 8
Limpiar parámetros (sanitize)
-
play_circle_outline
Clase 9
Qué es un ORM
-
play_circle_outline
Clase 10
Configurar SequelizeJS
-
play_circle_outline
Clase 11
Bases de datos relacionales y no relacionales
-
-
Módulo 4 | 24 clases
Buenas prácticas de desarrollo.
expand_more-
play_circle_outline
Clase 1
Presentación del bloque
-
play_circle_outline
Clase 2
Qué es el MVC
-
play_circle_outline
Clase 3
Organizar un proyecto MVC
-
play_circle_outline
Clase 4
Qué son las migraciones
-
play_circle_outline
Clase 5
CLI de Sequelize
-
play_circle_outline
Clase 6
Generando migraciones
-
play_circle_outline
Clase 7
Modelos
-
play_circle_outline
Clase 8
Controladores
-
play_circle_outline
Clase 9
Vistas
-
play_circle_outline
Clase 10
Seeders
-
play_circle_outline
Clase 11
Integrando todo
-
play_circle_outline
Clase 12
Qué es REST
-
play_circle_outline
Clase 13
REST en la práctica
-
play_circle_outline
Clase 14
Verbos Http en REST
-
play_circle_outline
Clase 15
Rutas REST en Express
-
play_circle_outline
Clase 16
Crear nuevos registros
-
play_circle_outline
Clase 17
Formularios
-
play_circle_outline
Clase 18
Mostrar registros
-
play_circle_outline
Clase 19
Vistas para todos los registros
-
play_circle_outline
Clase 20
Identificadores únicos
-
play_circle_outline
Clase 21
Consulta individual de recursos
-
play_circle_outline
Clase 22
Actualizar registros
-
play_circle_outline
Clase 23
Formularios con PUT, PATCH y DELETE
-
play_circle_outline
Clase 24
Eliminar registros
-
-
Módulo 5 | 14 clases
Autenticación
expand_more-
play_circle_outline
Clase 1
Explicando cómo funciona la autenticación de usuarios
-
play_circle_outline
Clase 2
Formulario de registro
-
play_circle_outline
Clase 3
Modelos y migración de usuarios
-
play_circle_outline
Clase 4
Validaciones
-
play_circle_outline
Clase 5
Validaciones en la base de datos y el modelo
-
play_circle_outline
Clase 6
Encriptar el password
-
play_circle_outline
Clase 7
Creación de usuarios
-
play_circle_outline
Clase 8
Inicio de sesión
-
play_circle_outline
Clase 9
Autenticación
-
play_circle_outline
Clase 10
Manejo de sesiones
-
play_circle_outline
Clase 11
Qué es un middleware
-
play_circle_outline
Clase 12
Buscar usuario autenticado
-
play_circle_outline
Clase 13
Cerrar sesión
-
play_circle_outline
Clase 14
Middlewares para protección de rutas
-
-
Módulo 6 | 14 clases
Relaciones en la base de datos.
expand_more-
play_circle_outline
Clase 1
Fundamentos de relaciones en la base de datos
-
play_circle_outline
Clase 2
Relaciones uno a muchos - El esquema
-
play_circle_outline
Clase 3
Relaciones uno a muchos - Los modelos
-
play_circle_outline
Clase 4
Nombres para asociaciones
-
play_circle_outline
Clase 5
Guardar relación uno a muchos
-
play_circle_outline
Clase 6
Relaciones en un proyecto real
-
play_circle_outline
Clase 7
Eager loading (Cargado anticipado)
-
play_circle_outline
Clase 8
Ejercicio - Implementa tu propio CRUD
-
play_circle_outline
Clase 9
Relaciones muchos a muchos
-
play_circle_outline
Clase 10
Integrando CRUD de Categorías
-
play_circle_outline
Clase 11
Tabla asociativa
-
play_circle_outline
Clase 12
Definir relación muchos a muchos
-
play_circle_outline
Clase 13
Crear relaciones muchos a muchos
-
play_circle_outline
Clase 14
Mostrar objetos de una relación muchos a muchos
-
-
Módulo 7 | 5 clases
Websockets (realtime)
expand_more-
play_circle_outline
Clase 1
¿Qué son las Websockets?
-
play_circle_outline
Clase 2
Usuarios conectados en tiempo real
-
play_circle_outline
Clase 3
Comunicar el servidor Http y el servidor de Websockets
-
play_circle_outline
Clase 4
Enviar datos de la base de datos a los clientes
-
play_circle_outline
Clase 5
Control de comunicación por usuario en Websockets
-
-
Módulo 8 | 4 clases
Entorno de producción
expand_more -
check_circle_outlineMódulo 9
Examen del curso
expand_more-
done_all
Examen
Examen final del curso
-