es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Es posible tener 2 sesiones activas diferentes al compartir cookies de sesión entre diferentes subdominios?

En nuestra aplicación, una Cuenta tiene varios Usuarios y cada cuenta diferente tiene un subdominio (por ejemplo: cuenta.nuestraapp.com).

También reservamos el subdominio app para nosotros como app.nuestraapp.com, que actúa como un inicio de sesión genérico desde donde un Usuario puede iniciar sesión en cualquier cuenta si se proporcionan las combinaciones correctas de subdominio, email y password.

controlador de inicio de sesión genérico:

class App::SessionsController < AppController
  def new
    @session_form = SessionForm.new
  end

  def create
    @session_form = SessionForm.new(params: session_params)
    if @session_form.save
      account = @session_form.account
      user = @session_form.user

      log_in user

      redirect_to admin_users_url(subdomain: account.subdomain)
    else
      render :new
    end
  end

  private

  def session_params
    params.require(:session_form).permit(:account_subdomain, :email, :password)
  end
end

Debido a que la sesión del Usuario se crea en app.nuestraapp.com pero el Usuario es redirigido a cuenta.nuestraapp.com después de la autenticación, nuestro archivo session_store se ve así:

Rails.application.config.session_store :cookie_store, key: '_ourapp_session',
                                       domain: :all,
                                       tld_length: 2

Con la configuración anterior, la sesión creada en el subdominio app sigue siendo válida para el subdominio cuenta.

El problema al que nos enfrentamos es que algunas personas que usan nuestra aplicación administran más de una cuenta, y si Bob inicia sesión en primercuenta.nuestraapp.com con el Usuario id 1 y luego en segundacuenta.nuestraapp.com con el Usuario id 5 en la misma computadora, la primera sesión se elimina y el Usuario se desconecta.

¿Por qué se elimina la primera sesión si los subdominios de la cuenta y las identificaciones de los usuarios son diferentes?

¿Es posible compartir sesiones entre subdominios (para que la sesión creada en app.nuestraapp.com funcione para cuenta.nuestraapp.com), pero también tener múltiples sesiones con diferentes Usuarios abiertas al mismo tiempo?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    La razón por la que se elimina la primera sesión es porque el dominio de la cookie de sesión se establece en :all, lo que significa que es válido para todos los subdominios de ourapp.com. Entonces, cuando Bob inicia sesión en secondaccount.ourapp.com, el dominio de la cookie de sesión se sobrescribe con secondaccount.ourapp.com y la cookie de sesión anterior para firstaccount.ourapp.com ya no es válida. Por lo tanto, se elimina la primera sesión y el usuario cierra sesión.

    Para compartir sesiones en varios subdominios pero también tener varias sesiones abiertas al mismo tiempo con diferentes usuarios, podemos establecer el dominio de la cookie de sesión en .ourapp.com, con un punto inicial. Esto hará que la cookie de sesión sea válida para todos los subdominios de ourapp.com, incluyendo app.ourapp.com y account.ourapp.com. Sin embargo, cada sesión de usuario debe tener un ID de sesión único para diferenciarlas entre sí. Esto se puede lograr estableciendo la clave de sesión en '_ourapp_session_' + user.id.to_s, en lugar de solo '_ourapp_session'. Con esta configuración, se pueden abrir múltiples sesiones con diferentes usuarios al mismo tiempo, en diferentes subdominios, a la vez que se comparte la misma cookie de sesión.

Comments are closed.