none
Compartir variables de sesión entre aplicaciones virtuales RRS feed

  • Pregunta

  • Tengo en mi IIS 7.0 un sitio web que contiene varias aplicaciones virtuales, está configurado así porque cada aplicación es un proyecto diferente en mi solución, en mi sitio web raiz tengo un formulario de login donde guardo un dato en una variable de sesión y necesito que este dato sea accesible en todas las aplicaciones virtuales durante toda la sesión.

    Mi duda se resume a..

    ¿Cual es la mejor manera de compartir variables de sesión entre aplicaciones virtuales?

    Gracias.


    JAAF

    miércoles, 23 de mayo de 2012 23:43

Respuestas

  • Estimado J Antonio 09

    A la pregunta 

    "...¿Cual es la mejor manera de compartir variables de sesión entre aplicaciones virtuales?..."

    Las unicas respuestas:
    Si lo que quieres es compartir la variables de session puedes (creo que son estas 5 si hay alguna otra escriban mas abajo asi aumentamos conocimiento je!)

    1. Cambiar el modo de estado de session (SessionState) a StateServer (modo de Estado de Servicio)
    2. Cambiar el modo de estado de session (SessionState) a SQLServer (modo de Estado de Servicio)
    3. Cambiar el modo de estado de session (SessionState) a Custom, y utilizar algun componente de proveedor de estado de session que hayas armado 
    4. Utilizar una DB para compartir "elementos comunes" (idem al punto 3, pero tendriamos que codifica la logica)
    5. Pasar variables de session mediante un mecanismo GET/POST (idem a pasar variables de session desde ASP Clasico, o PHP).. 

    Veo que Leandro tambien te pregunta algo, porque la naturaleza separada de estas app? estan separadas en dominios de app diferentes y quieres compartir datos? Podrias implementar un Login comun, pero bueno... eso es otro tema. Vamos a ver en mas detalle lo que te comento arriba

    Mas en detalle

    1. Cambiar el modo de estado de session (SessionState) a StateServer (modo de Estado de Servicio)
      (utilizando el mismo nombre de cookie, la misma configuracion del machineKeyen el web.config de la app y ademas el mismo nombre de aplicacion)
      En esta ultima parte esta el problema, no es facil cambiar el nombre de app (para el modo de stateserver) por default toma el AppName que da el IIS (que es algo asi LM/W3SVC/2/ROOT/WebSite1)
      NOTA: Tengo un post en borrador hace un par de meses.. que te puede ayudar (mañana me hago un tiempo y lo publico)
    2. Cambiar el modo de estado de session (SessionState) a SQLServer (modo de Estado de Servicio)
      Idem al anterior, solo que aqui como todo va a la DB, es mas facil modificar el nombre de la app para que sea lo mismo (misma cookie, misma machineKey se mantiene)
    3. Cambiar el modo de estado de session (SessionState) a Custom, y utilizar algun componente de proveedor de estado de session que hayas armado 
      Idem a los anteriores solo que puedes implementar la persistencia donde quieras (incluso puedes aggar tus propios parametros de configuracion como lo que necesitamos el mismo AppNAme) Se que hay implementaciones (pero ahora que estoy escribiendo con sueño no las encuentro)
    4. Utilizar una DB para compartir "elementos comunes"(idem al punto 3, pero tendriamos que codifica la logica)
    5. Pasar variables de session mediante un mecanismo GET/POST (idem a pasar variables de session desde ASP Clasico, o PHP).. 
      Aqui la idea
        - How to Share Session State Between Classic ASP and ASP.NET
          http://msdn.microsoft.com/en-us/library/aa479313.aspx


    NOTA FINAL: Justo tengo algo en borrador hace varios (meses, años.. de este tema) asi que mañana lo refloto y lo publico para que tengas de referencia (y de paso me saco un borrador de encima)

    Espero que te sirva de ayuda o guia.


    Jose. A Fernandez | blog: http://geeks.ms/blogs/fernandezja



    jueves, 24 de mayo de 2012 5:45

Todas las respuestas

  • en mi sitio web raiz tengo un formulario de login donde guardo un dato en una variable de sesión y necesito que este dato sea accesible en todas las aplicaciones virtuales durante toda la sesión.

    me temo que no vas a poder compartirlo, porque cada sitio en si trabaja de forma idependiente con el espacio de memoria

    puede usar el querystring para apsar info en la url o una base de datos para persistir y compartir aplciaciones

    pero creo que el error lo has comentido al separar una aplicacion que trabja como uan en varios proyectos, eso no esta nada bien

    hubieras usado carpetas para organizar, pero si usas diferentes sitio la session no se puede compartir

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    jueves, 24 de mayo de 2012 0:34
  • Estimado J Antonio 09

    A la pregunta 

    "...¿Cual es la mejor manera de compartir variables de sesión entre aplicaciones virtuales?..."

    Las unicas respuestas:
    Si lo que quieres es compartir la variables de session puedes (creo que son estas 5 si hay alguna otra escriban mas abajo asi aumentamos conocimiento je!)

    1. Cambiar el modo de estado de session (SessionState) a StateServer (modo de Estado de Servicio)
    2. Cambiar el modo de estado de session (SessionState) a SQLServer (modo de Estado de Servicio)
    3. Cambiar el modo de estado de session (SessionState) a Custom, y utilizar algun componente de proveedor de estado de session que hayas armado 
    4. Utilizar una DB para compartir "elementos comunes" (idem al punto 3, pero tendriamos que codifica la logica)
    5. Pasar variables de session mediante un mecanismo GET/POST (idem a pasar variables de session desde ASP Clasico, o PHP).. 

    Veo que Leandro tambien te pregunta algo, porque la naturaleza separada de estas app? estan separadas en dominios de app diferentes y quieres compartir datos? Podrias implementar un Login comun, pero bueno... eso es otro tema. Vamos a ver en mas detalle lo que te comento arriba

    Mas en detalle

    1. Cambiar el modo de estado de session (SessionState) a StateServer (modo de Estado de Servicio)
      (utilizando el mismo nombre de cookie, la misma configuracion del machineKeyen el web.config de la app y ademas el mismo nombre de aplicacion)
      En esta ultima parte esta el problema, no es facil cambiar el nombre de app (para el modo de stateserver) por default toma el AppName que da el IIS (que es algo asi LM/W3SVC/2/ROOT/WebSite1)
      NOTA: Tengo un post en borrador hace un par de meses.. que te puede ayudar (mañana me hago un tiempo y lo publico)
    2. Cambiar el modo de estado de session (SessionState) a SQLServer (modo de Estado de Servicio)
      Idem al anterior, solo que aqui como todo va a la DB, es mas facil modificar el nombre de la app para que sea lo mismo (misma cookie, misma machineKey se mantiene)
    3. Cambiar el modo de estado de session (SessionState) a Custom, y utilizar algun componente de proveedor de estado de session que hayas armado 
      Idem a los anteriores solo que puedes implementar la persistencia donde quieras (incluso puedes aggar tus propios parametros de configuracion como lo que necesitamos el mismo AppNAme) Se que hay implementaciones (pero ahora que estoy escribiendo con sueño no las encuentro)
    4. Utilizar una DB para compartir "elementos comunes"(idem al punto 3, pero tendriamos que codifica la logica)
    5. Pasar variables de session mediante un mecanismo GET/POST (idem a pasar variables de session desde ASP Clasico, o PHP).. 
      Aqui la idea
        - How to Share Session State Between Classic ASP and ASP.NET
          http://msdn.microsoft.com/en-us/library/aa479313.aspx


    NOTA FINAL: Justo tengo algo en borrador hace varios (meses, años.. de este tema) asi que mañana lo refloto y lo publico para que tengas de referencia (y de paso me saco un borrador de encima)

    Espero que te sirva de ayuda o guia.


    Jose. A Fernandez | blog: http://geeks.ms/blogs/fernandezja



    jueves, 24 de mayo de 2012 5:45
  • Muy buena respuesta Jose A. Fernandez gracias por tu tiempo, de momento estoy probando con la opción 3 pero me preocupa lo que comenta Leandro, respondiendo a su pregunta:

    Optamos por separar la aplicación en proyectos debido a que es un sistema muy grande que está dividido en módulos, los cuales no deben depender uno del otro para funcionar pero tambien deben poder interactuar como un sistema integrado entre los módulos que esten presentes.

    Ya con este contexto, consideran que es mas conveniente un solo proyecto organizando los módulos en carpetas??

    Muchas gracias.


    JAAF

    jueves, 24 de mayo de 2012 23:49
  • Estimado J Antonio 09

    Antes que me olvide dejo aqui el enlace con el articulo con varias opciones (dos mas de las que comente por aqui) para que quede de referencia (y obligarme a escribir en mas detalle cada opcion)

    Con respescto a tu inquietud:

    "....  consideran que es mas conveniente un solo proyecto organizando los módulos en carpetas??...."

    Depende de muchos factores, pero tener un solo proyecto inundado de paginas en vez de particionar en app separadas con la semantica de su funcionalidad bien definida me parece mejor, pero bueno siempre hay peros. Y Justamente hoy escuche esa tactica por ejemplo para las app metro en windows 8 


    Jose. A Fernandez | blog: http://geeks.ms/blogs/fernandezja


    miércoles, 6 de junio de 2012 4:11