language agnostic - ¿Qué son las sesiones? ¿Cómo trabajan?
language-agnostic session (5)
Estoy empezando a comenzar a aprender el desarrollo de aplicaciones web, usando Python. Me refiero a los términos ''cookies'' y ''sesiones''. Entiendo las cookies porque almacenan cierta información en un par de valores clave en el navegador. Pero tengo un poco de confusión con respecto a las sesiones, en una sesión también almacenamos datos en una cookie en el navegador del usuario.
Por ejemplo, inicio sesión usando username=''rasmus''
y password=''default''
. En tal caso, los datos se publicarán en el servidor, que se supone que debe verificar e iniciar sesión si está autenticado. Sin embargo, durante todo el proceso, el servidor también genera un ID de sesión que se almacenará en una cookie en mi navegador. Ahora el servidor también almacena este ID de sesión en su sistema de archivos o almacén de datos.
Pero basado solo en el ID de sesión, ¿cómo podría saber mi nombre de usuario durante mi recorrido posterior a través del sitio? ¿Almacena los datos en el servidor como un dictado donde la clave sería un ID de sesión y los valores como username
, email
, etc. serán los valores?
Me estoy confundiendo bastante aquí. Necesitas ayuda.
Explicación simple por analogía
Imagina que estás en un banco, tratando de sacar algo de dinero de tu cuenta. Pero está oscuro; el banco está completamente negro: no hay luz y no puedes ver tu mano frente a tu cara. Estás rodeado de otras 20 personas. Todos ellos parecen iguales. Y todos tienen la misma voz. Y todo el mundo es un potencial malo. En otras palabras, HTTP es sin estado.
Este banco es un tipo divertido de banco; por el bien de la discusión, aquí se explica cómo funcionan las cosas:
- esperas en línea (o en línea) y hablas con el cajero: haces una solicitud para retirar dinero y luego
- Tienes que esperar brevemente en el sofá, y 20 minutos después.
- Tienes que ir y realmente recoger tu dinero del cajero.
Pero, ¿cómo te dirá el cajero aparte de todos los demás?
El cajero no puede verlo o reconocerlo fácilmente, recuerde, porque las luces están apagadas. ¿Qué pasa si su cajero le da su retiro de $ 10,000 a otra persona, la persona equivocada? Es absolutamente vital que el cajero lo reconozca como el que realizó el retiro, para que pueda obtener el dinero (o recurso) que solicitó.
Solución:
Cuando se le aparece por primera vez al cajero, él o ella le dice algo en secreto:
"Cuando me hablas", dice el cajero, "primero debes identificarte como GNASHEU329, de esa manera sé que eres tú".
Nadie más sabe el código de acceso secreto.
Ejemplo de cómo retiré efectivo:
Así que decido ir y relajarme por 20 minutos y luego, voy al cajero y le digo "me gustaría recoger mi retiro"
El cajero me pregunta: "¿Quién eres tú?!"
"¡Soy yo, señor George Banks!"
"¡Pruébalo!"
Y luego les digo mi contraseña: GNASHEU329
"Ciertamente el señor Banks!"
Básicamente es así como funciona una sesión. Permite que uno sea identificado de manera única en un mar de millones de personas. Necesitas identificarte cada vez que trates con el cajero.
Si tiene alguna pregunta o no está claro, envíe un comentario e intentaré aclararlo.
Explicación a través de imágenes:
"Sesión" es el término utilizado para referirse a la hora en que un usuario navega por un sitio web. Se supone que representa el tiempo entre su primera llegada a una página del sitio hasta el momento en que dejan de usarlo. En la práctica, es imposible saber cuándo el usuario ha terminado con el sitio. En la mayoría de los servidores hay un tiempo de espera que finaliza automáticamente una sesión a menos que el mismo usuario solicite otra página.
La primera vez que un usuario se conecta, se crea algún tipo de ID de sesión (la forma en que se realiza depende del software del servidor web y del tipo de autenticación / inicio de sesión que use en el sitio). Al igual que las cookies, esto generalmente ya no se envía en la URL porque es un problema de seguridad. En su lugar, se almacena junto con un montón de otras cosas que colectivamente también se conocen como la sesión. Las variables de sesión son como las cookies: son pares de nombre-valor enviados junto con una solicitud de página y devueltos con la página desde el servidor, pero sus nombres se definen en un estándar web.
Algunas variables de sesión se pasan como encabezados HTTP . Se pasan de un lado a otro detrás de las escenas de cada página para que no aparezcan en el navegador y le digan a todos algo que puede ser privado. Entre ellos se encuentran el USER_AGENT, o el tipo de navegador que solicita la página, el REFERENTE o la página que enlazó con la página solicitada, etc. Algunos software de servidor web agregan sus propios encabezados o transfieren datos de sesión adicionales específicos al software de servidor. Pero los estándares están bastante bien documentados.
Espero que ayude.
Debido a que HTTP no tiene estado, para poder asociar una solicitud a cualquier otra solicitud, necesita una forma de almacenar datos de usuario entre solicitudes HTTP.
Las cookies o los parámetros de la URL (por ejemplo, como http://example.com/myPage?asd=lol&boo=no ) son dos formas adecuadas de transportar datos entre 2 o más solicitudes. Sin embargo, no son buenos en caso de que no desee que los datos sean legibles / editables en el lado del cliente.
La solución es almacenar ese lado del servidor de datos, asignarle un "id" y dejar que el cliente solo sepa (y devuelva a cada solicitud http) ese id. Hay que ir, sesiones implementadas. O puede usar el cliente como un conveniente almacenamiento remoto, pero cifraría los datos y mantendría el lado del servidor secreto.
Por supuesto, hay otros aspectos a considerar, como si no quisiera que las personas secuestraran las sesiones de otros, querrá que las sesiones no duren para siempre sino que expiren, y así sucesivamente.
En su ejemplo específico, la identificación del usuario (podría ser un nombre de usuario u otra identificación única en su base de datos de usuario) se almacena en los datos de la sesión, del lado del servidor, después de la identificación exitosa. Luego, por cada solicitud HTTP que reciba del cliente, la identificación de la sesión (proporcionada por el cliente) le indicará los datos de sesión correctos (almacenados por el servidor) que contienen la identificación del usuario autenticado, de esa manera su código sabrá qué usuario es está hablando con
HTTP es un protocolo de conexión sin estado, es decir, el servidor no puede diferenciar entre diferentes conexiones de diferentes usuarios.
Por lo tanto, viene una cookie, una vez que un cliente se conecta por primera vez a un servidor, el servidor genera una nueva identificación de sesión, que luego se enviará al cliente como valor de cookie. Y de ahora en adelante, esta identificación de sesión identificará esa conexión de cliente, porque dentro de cada solicitud HTTP verá la identificación de sesión apropiada dentro de las cookies.
Ahora, para cada ID de sesión, el servidor mantiene cierta estructura de datos, lo que le permite almacenar datos específicos para el usuario, esta estructura de datos a la que puede llamar de forma abstracta sesión.
Piense en HTTP como una persona (A) que tiene PÉRDIDA DE MEMORIA A CORTO PLAZO y olvida a cada persona tan pronto como esa persona se pierde de vista.
Ahora, para recordar a diferentes personas, A toma una foto de esa persona y la guarda. La foto de cada persona tiene un número de identificación. Cuando esa persona vuelve a la vista, esa persona le dice su número de identificación a A y A encuentra su imagen por número de identificación. Y listo !!, A sabe quién es esa persona.
Lo mismo ocurre con HTTP. Sufre de PÉRDIDA DE MEMORIA A CORTO PLAZO. Utiliza Sesiones para registrar todo lo que hizo mientras usaba un sitio web, y luego, cuando vuelve, lo identifica con la ayuda de Cookies (Cookie es como un token). La imagen es la sesión aquí y la ID es la cookie aquí.