Revista Informática

Sinatra desde Cero: Sesiones y Cookies

Publicado el 21 noviembre 2013 por Codehero @codeheroblog

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.sessiony 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]}" end

123456789101112131415161718 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.

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]}" end get '/logout' do session.clear redirect '/fetch' end

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." end

123456789101112131415 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!


Volver a la Portada de Logo Paperblog