Para comprender correctamente todo lo que hablaremos en esta serie, es conveniente tener un conocimiento básico sobre el lenguaje de Ruby. Podrás conseguir toda la información desees aquí
Sesiones
¿Qué son sesiones? En una aplicación web muchas veces debemos o queremos conocer quien es la persona que está usando nuestra aplicación para poder servirle el contenido apropiado. Sabemos que el protocolo HTTP no tiene estado, por lo tanto de manera directa es imposible conocer si una misma persona está realizando más de una petición y por consiguiente no sabemos si le debemos servir algo particular.
La sesión es la manera que hace posible mantener el estado de un usuario mientras utiliza la aplicación y esto se logra guardando un cookie en el navegador del mismo.
¿Cómo funciona? En Sinatra por ser un Rack Application se emplea el uso de rack.session
y se guarda el cookie generado del lado del cliente, en ese cookie se va persistiendo data relacionada con la actividad del usuario dentro de nuestra aplicación.
Vamos a observar un pequeño ejemplo de como funciona.
Crear una sesión
Para crear una sesión se realiza por medio de el bloque de configuración (configure block
) una vez definido el mismo el objeto de la sesión se encuentra completamente listo para almacenar y recuperar información.
bloque de configuración
El bloque de configuración de Sinatra nos permite personalizar el funcionamiento de nuestra aplicación; el mismo puede ser usado basado en ambientes (desarrollo, pruebas, producción).
require 'sinatra' configure do enable :sessions end before do content_type :txt end get '/set' do session[:foo] = Time.now "Estableciendo la sesión." end get '/fetch' do "El valor de la sesión es: #{session[:foo]}" end123456789101112131415161718 require'sinatra' configure do enable:sessionsend before do content_type:txtend get'/set'do session[:foo]=Timenow "Estableciendo la sesión."end get'/fetch'do "El valor de la sesión es: #{session[:foo]}"end
Sinatra automáticamente crea una llave de seguridad para codificar y descodificar las sesiones de manera segura de todas maneras aunque Sinatra cree automáticamente las llaves de seguridad es mucho mejor que nosotros creemos y agreguemos esta llave de manera manual.
Destruir sesión
Destruir una sesión es más fácil que crearla, y solo basta con llamar a session.clear
dentro de una de nuestras rutas.
1234567891011121314151617181920212223 require'sinatra' configure do enable:sessionsend before do content_type:txtend get'/set'do session[:foo]=Timenow "Estableciendo la sesión."end get'/fetch'do "El valor de la sesión es: #{session[:foo]}"end get'/logout'do sessionclear redirect'/fetch'end
De la misma manera como lo explicamos en el párrafo anterior dentro de la ruta /logout
destruimos la sesión y posterior a esto redirecionamos al usuario hacia la ruta /fetch
para comprobar que no existe un valor de la variable sesión.
Cookies
Indirectamente hemos explicado que son cookies y hemos dicho que van en el lado del cliente. Pero… ¿Qué son realmente los cookies? Los cookies son pequeños fragmentos de metadata que se almacenan del lado del usuario y esencialmente existen dos tipos de cookies de sesión y persistentes la diferencia entre ambos es sencilla. Los cookies de sesión expiran cuando el usuario cierra su navegador o destruye la sesión haciendo un logout de la misma. Los cookies persistentes simplemente tienen una fecha de caducidad.
require 'sinatra' get '/' do response.set_cookie "foo", "bar" "Cookie establecido. Estas interesado en <a href='/read'>leer</a> su valor?" end get '/read' do "El valor del cookie es: #{request.cookies['foo']}." end get '/delete' do response.delete_cookie "foo" "El cookie ha sido eliminado." end123456789101112131415 require'sinatra' get'/'do responseset_cookie"foo","bar" "Cookie establecido. Estas interesado en <a href='/read'>leer</a> su valor?"end get'/read'do "El valor del cookie es: #{request.cookies['foo']}."end get'/delete'do responsedelete_cookie"foo" "El cookie ha sido eliminado."end
Conclusión
En este sexto capítulo, hemos aprendido a utilizar de manera muy básica las sesiones y los cookies. Si te surge algún tipo de duda no te detengas y déjanos un comentario, que gustosamente lo responderemos.
¡Hasta el próximo capítulo!