¿Cómo puedo compartir una sesión en múltiples subdominios en ASP.NET?

Tengo una aplicación donde, durante el uso de la aplicación, un usuario puede hacer clic desde

virginia.usa.com 

a

 newyork.usa.com 

Como prefiero no crear una nueva sesión cada vez que un usuario pasa de un subdominio a otro, ¿cuál es una buena forma de compartir información de sesión en múltiples subdominios?

Etiquetaste esto con ASP.NET e IIS, así que asumiré que es tu entorno. Asegúrese de tener esto en su web.config:

  

Si sus dos subdominios se asignan a la misma aplicación, entonces está listo. Sin embargo, si son aplicaciones diferentes, deberá realizar un trabajo adicional, como usar un almacenamiento de sesión basado en SQL Server (y piratear los procedimientos almacenados para asegurarse de que todas las aplicaciones comparten los mismos datos de sesión) o con un HttpModule para interceptar el nombre de la aplicación , ya que incluso con las cookies compartidas y la misma clave de máquina, 2 aplicaciones seguirán usando 2 tiendas diferentes para sus datos de sesión.

Siga sus propias sesiones y use una cookie con una configuración de dominio apropiada, es decir. .usa.com .

Alternativamente, si está usando PHP, creo que hay una configuración para cambiar la configuración de dominio predeterminada de la cookie de sesión que utiliza, que también puede ser útil.

La configuración que estás buscando es:

 session.use_cookies = 1 session.use_only_cookies = 1 session.cookie_domain = .usa.com 

Hace poco pasé por esto y aprendí por las malas. Localhost en realidad se considera un TLD. Los dominios de cookies requieren al menos un dominio de segundo nivel: test.com. Si desea que las cookies funcionen para un dominio y todos sus subdominios, prefijo con un ‘.’ – .test.com.

Al ejecutar / depurar localmente, la configuración de un dominio de localhost fallará, y fallará incluso si el dominio está configurado correctamente porque Visual Studio usa localhost de manera predeterminada.

Este localhost predeterminado puede modificarse en las propiedades del proyecto para que el proyecto se ejecute realmente en el dominio de cookies test.com. Básicamente, si la dirección en el navegador coincide, puede hacer que funcione.

Mi problema está documentado aquí: Establecer Dominio de cookies de ServiceStack en Web.Config hace que el Id. De sesión cambie en cada solicitud

Espero que esto ayude.

Si está utilizando PHP, un truco sería hacer un pequeño script de inclusión (o dos) para hacer lo siguiente:

1 Serialice su array $ _SESSION 2 Pase esa cadena como una entrada oculta, haciendo todos los enlaces a esos botones en formularios separados usando POST. 3 También incluya una entrada oculta booleana para que su secuencia de comandos sepa si necesita usar la sesión actual o des seializar $ _POST [‘session’] 4 Implemente esto en su sitio, llamando las cosas cuando sea apropiado

No haría esto si realmente hay una forma aprobada de transferir una sesión. Espero que al menos haya considerado usar cookies.

La respuesta de Matt es definitivamente el camino a seguir si tienes múltiples subdominios apuntando a la misma aplicación IIS (que es exactamente la situación que tengo ahora, usando un comodín DNS y luego haciendo un subdominio ‘sniffing’ en el extremo receptor).

Sin embargo, quería agregar algo que experimenté en caso de que alguien descubriera que esto no funciona para ellos. Establecer la línea de httpCookies por sí sola no lo hizo por mí, tuve que agregar una entrada machineKey en mi archivo web.config:

machineKey decryptionKey = “12 … D1” validationKey = “D7..8B”

Particularmente extraño ya que no estoy en una configuración de granja web (a menos que AWS / EC2 esté actuando efectivamente). Tan pronto como lo hice, funcionó como un campeón.