Compartir sesiones entre subdominios

Hola

quería consultarles para ver si me pueden orientar y saber cual puede
ser la forma mas idónea de compartir sesiones entre subdominios.

por lo que había leído en el wiki de rails bastaba con poner en
config/development.rb
ActionController::CgiRequest::DEFAULT_SESSION_OPTIONS.update(
:session_domain => ‘.localhost’)

pero con esto no he conseguido que funcionase :frowning: al principio pensé que
podría ser por el puerto ( :session_domain => ‘.localhost:3000’ ) pero
al indicarle el puerto salta el error de
protect_from_forgery, pero aunque lo desactive
self.allow_forgery_protection = false
siguen sin poder pasarse las sessiones.

Como ultimo recurso había pensado en crear una tabla en la base de datos
y guardar hay las sesiones. ¿como lo ven?
lo de la base de datos a mi me parece un poco excesivo ya que aunque hay
múltiples subdominios es una única aplicación.

Gracias por la ayuda
Un saludo.

La opción recomendable es utilizar la base de datos para almacenar las
sesiones, porque sino utilizas el filesystem y lo puedes romper.

En Rails 2.0.2 esta opción està desactivada por defecto y las
sessiones se almacenan en cookies.

Para crear la tabla de sesiones has de utilizar la siguiente tarea de
rake.

rake db:sessions:create

Y descomentar la linea siguiente en environment.rb.

config.action_controller.session_store = :active_record_store

Un saludo,

Francesc

On Jan 29, 2008, at 1:32 PM, Fernandez S. wrote:

pero con esto no he conseguido que funcionase :frowning: al principio pensé
y guardar hay las sesiones. ¿como lo ven?
simplelogica.net

name. Francesc E. i Martí
voice. +34 678.681.603

On Jan 29, 2008, at 1:32 PM, Fernandez S. wrote:

Como ultimo recurso había pensado en crear una tabla en la base de
datos
y guardar hay las sesiones. ¿como lo ven?
lo de la base de datos a mi me parece un poco excesivo ya que aunque
hay
múltiples subdominios es una única aplicación.

No tiene que ver con el storage, sino con las reglas que sigue un
navegador para escoger que cookies del monton que tiene almacenadas
envia a cada site.

Si pasan por subdominio o no depende del atributo “domain” de la
cookie, miratelo aqui:

 http://wp.netscape.com/newsref/std/cookie_spec.html

– fxn

Gracias a ambos por la información he estado probando de ambas maneras
(con cookies y con
active_record_store) pero no ha habido manera de ninguna forma, les
comento un poco como lo he echo

  1. con active_record_store
  • genero la migración, creo el modelo Session y edito el
    environment.rb
  • luego creo la sesión en el método que sea
    session[:user_id] = 2 # por ejemplo

la sesión se crea correctamente y veo que el campo “data” de la tabla
sessions se actualiza pero luego si necesito pasar al subdominio
xyz.localhost:3000 la sesión ya no esta.

Había probado a intentar buscarla en la tabla sessions con
@session = Session.find_by_data( session[:user_id] ) pero nada no
hay manera

  1. con cookies

aunque en la dirección que comento Xavier indica que el atributo
domain_name por defecto si no se indica este coincidirá con el dominio
de la url y que por ejemplo el dominio acme.com coincidiría también con
el host anvil.acme.com, en mi caso que tengo localhost y xyz.localhost
no consigo que se pase el valor de la cookie.

  • creaba la cookie de la siguiente manera

    sin dominio para que cogiera por defecto el de la URL

    cookies[:user_id] = { :value => 2 }

    y con dominio

    cookies[:user_id] = { :value => 2, :domain => “.localhost” } #
    :domain => “*.localhost”

En ambos casos pasa lo mismo, no se tiene acceso al valor si se cambia
de subdominio.

Muchas gracias por la ayuda
Un saludo

A ver … acabo de provarlo y funciona sin ningun problema. He hecho
lo siguiente …

  1. He añadido 2 subdominios al fichero /etc/hosts

  2. He creado una aplicación Rails.

  3. He generado un controlador llamado welcome.

    class WelcomeController < ApplicationController

    def index
    end
    
    def set_session
      session[:test] = Time.now
      redirect_to :action => 'index'
    end
    
    def unset_session
      session[:test] = nil
      redirect_to :action => 'index'
    end
    

    end

  4. En la vista index del controlador welcome he añadido …

    Session <%= session[:test] %>

    • <%= link_to "Set Session", :action => 'set_session' %>
    • <%= link_to "Unset Session", :action => 'unset_session' %>
  5. He ido a los subdominios …

    subdominio1.localhost:3000/welcome
    subdominio2.localhost:3000/welcome

Y he hecho un “set session” … y la session efectivamente se mantiene
en los subdominios.

La aplicación que he creado para probar esto la he subido para que la
puedas descargar y lo puedas probar.

Puedes descargarla en: http://dropbox.intraducibles.net/8bc788

Un saludo,

Francesc

On Jan 29, 2008, at 7:56 PM, Fernandez S. wrote:

session[:user_id] = 2 # por ejemplo
2. con cookies
cookies[:user_id] = { :value => 2 }
Un saludo

Posted via http://www.ruby-forum.com/.


Ror-es mailing list
[email protected]
simplelogica.net


name. Francesc E. i Martí
voice. +34 678.681.603

Puedes descargarla en: http://dropbox.intraducibles.net/8bc788

Muchas gracias Francesc por intentar ayudarme.

He descargado la aplicación que has generado para probar y efectivamente
si vas al subdominio1 y creas la sesión y luego al subdominio2 y creas
la sesión funciona correctamente pero lo que se han creado son dos
sesiones distintas.

Lo que estaba tratando era crear una sesión en el subdominioX y que esa
sesión fuese la misma para todos los subdominios. que es lo que no se si
será posible.

Gracias de nuevo por la ayuda, voy a seguir probando.
Un saludo.

Añade esto en development.rb, production.rb … con tu dominio. Y
deberia funcionar.

ActionController
::CgiRequest::DEFAULT_SESSION_OPTIONS.update(:session_domain =>
‘.intraducibles.net’)

De esta manera puedes entrar en …

http://es.intraducibles.net
http://ca.intraducibles.net
http://intraducibles.net

I todos mantienen la
sesión.
Es esto no?

Un saludo,

Francesc

On Jan 29, 2008, at 10:02 PM, Xavier N. wrote:

mano que ya es lo que intentabas hacer. Ten en cuenta las reglas sobre


Ror-es mailing list
[email protected]
simplelogica.net


name. Francesc E. i Martí
voice. +34 678.681.603

Ok, ya esta, muchas gracias a ambos por la ayuda.

han sido desde el principio mi torpeza con los “top-levels” que yo me
empeñaba en pasarle únicamente un localhost sin extensión.

Muy amables, gracias de nuevo.
Un saludo.

On Jan 29, 2008, at 9:41 PM, Fernandez S. wrote:

Lo que estaba tratando era crear una sesión en el subdominioX y que
esa
sesión fuese la misma para todos los subdominios. que es lo que no
se si
será posible.

En efecto lo que funciona sin hacer nada es tener sesiones distintas
por subdominio. Para que no sea asi le tienes que poner el “domain” a
mano que ya es lo que intentabas hacer. Ten en cuenta las reglas sobre
top-levels que menciona la pagina que enlace. No lo he probado pero
dudo que puedas enviar “localdomain” o “localhost” como domain y que
el navegador se quede la cookie.

Ojo con compartir sesiones que le puedes mostrar al del subdominio
“foo” el mensaje en el flash del del subdominio “bar” y cosas asi. Eso
ya tu ves si tiene sentido en la aplicacion.

– fxn