locked
Mantenimiento de sesión RRS feed

  • Pregunta

  • Hola, a todos
     gracias por vuestra atención.

     tengo un problema que no sé a qué se debe. Tengo una aplicación ASP.NET que usa Session["Sesion"] para crear una nueva sesión que identifica a un usuario. En el IIS, tengo que el timeout de las sesiones es 20 minutos y en cambio, he detectado que las sesiones se cierran solas sin haber llegado a los 20 minutos, a veces solo ha pasado pocos minutos, aunque sí estoy moviendome por las páginas.

      Agradezco mucho vuestra ayuda.

    Un saludo.
    Camino.
    C
    jueves, 18 de junio de 2009 11:28

Respuestas

  • Aqui va otro post
    (que ayuda a entender mas lo que Venom_aa nos quiere decir)


    Parece el mismo timeout no?.. pero difieren 

        Authentication Timeout: Intervalo de tiempo en minutos tras el cual caduca la autenticación. El valor predeterminado es de 30 minutos. O sea el periodo de inactividad que el usuario puede realizar hasta que se le presente la pagina de login nuevamente. 
       SessionState Timeout: Obtiene y establece el tiempo de espera (en minutos) que se permite entre solicitudes antes de que el proveedor de estado de sesión termine la sesión. 
    Cuanto tiempo se debe mantener el estado de la session. 

    Que puede pasar que el SessionState Timeout sea menor que el Authentication Timeout, o sea la session se puede perder pero el usuario sigue autenticado (o sea no se pregunta por el login).. esto sucede cuando la session esta en modo InProc y "se pierden" algunos los valores de session (porque se "limpia" el proceso donde se esta ejecutando juanto con las variables) pero el usaurio sigue autenticado. 


    Espero que te sirva... 


    Enlaces
    ------------------------------

     ·         FormsAuthenticationConfiguration.Timeout (Propiedad)
    Obtiene o establece el tiempo de espera de autenticación.

    http://msdn.microsoft.com/es-es/library/system.web.configuration.formsauthenticationconfiguration.timeout(VS.80).aspx

     

    ·         Elemento authentication (Esquema de configuración de ASP.NET) 
    http://msdn2.microsoft.com/es-es/library/532aee0e.aspx   

     

    ·         HttpSessionState.Timeout (Propiedad)
    Obtiene y establece el tiempo de espera (en minutos) que se permite entre solicitudes antes de que el proveedor de estado de sesión termine la sesión. 
     http://msdn.microsoft.com/es-es/library/system.web.sessionstate.httpsessionstate.timeout(VS.80).aspx

     

     


    Jose. A Fernandez | blog: http://geeks.ms/blogs/fernandezja
    martes, 23 de junio de 2009 23:55

Todas las respuestas

  • Intenta con Session.timeout=
    Daniel Vargas MCP - http://daniel-vargas.blogspot.com
    jueves, 18 de junio de 2009 15:08
  • hola,

    la verdad es bastante raro el efecto que describes.

    Has probado agregar a ese sitio web en un Application Pool independiente ?

    Por ahi lo que se esta reciclando es el application pool, y como estan varios sitios usando el mismo uno afecta al resto.


    Estas usando Win 2003 como server ?

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    jueves, 18 de junio de 2009 15:27
  • Hola,

      Sí, es un win 2003 server.
      La aplicación está en el sitio web predeterminado, en el pool predeterminado. Tengo otra aplicación pero está en otro pool.

     Probaré a poner Session.Timeout en la aplicación.

      Gracias por vuestra ayuda.

    Saludos.
    C


    C
    lunes, 22 de junio de 2009 8:14
  • Yo tuve el mismo problema.
    Al parecer la solucion es un conjunto de modificaciones
    Primero en el web.config agregar el timeout de la aplicacion
    <system.web>
        <sessionState timeout="720" />

    De igual manera agregar el tiempo para la persistencia de la autentificacion

    <authentication mode="Forms" >
          <forms loginUrl="login.aspx" timeout="720" />
    </authentication>

    Despues en el IIS
    En las propiedades de la aplicacion agregar el mismo timeout deseado.

    Ademas en el pool de aplicacion cambiar los valores de shutdown worker process if idle y recycle worker process.

    Solo asi logre modificar el timeout de mi aplicacion, espero te funcione a ti tambien.

    martes, 23 de junio de 2009 22:10
  • Hola Camino_2008

    Parece ser que es lo que te comenta Leandro, se esta reciclando...reiniciando el AppPool
    Veamos...
    (esto post ya lo escribi en otro lado, y aqui va... es un poco largo pero me parece que vale en este caso)

      - Estas en el servidor de produccion? o estas desarrollando en tu maquina?
         Hay un EFECTO que es PERDER LAS VARIABLES DE SESSION cuando se encuentra en modo INPROC

      - Se pierden todas la variables o solo algunas?
      - Siempre pasa lo mismo en el mismo lugar? (la misma pagina)

     

    Bueno te envio unos enlaces para que mires, por ejemplo:

       - ¿Por qué se reinicia mi aplicación ASP.NET?
          http://support.microsoft.com/?scid=kb;es;871042   

          - Las variables de sesión (modo inProc) se pierden intermitentemente.
          - Se pierden las variables de estado de aplicación.
          - Se pierden los datos de caché.
          - Parece que el evento Application Start y el evento Application End se inician inesperadamente

                     

    Con lo que respecta al primer punto, cuando las vbles de session se almacenan en modo INPROC (que es la configuracion por defecto) se guardan en el mismo proceso que esta corriendo tu applicacion web, y si falta memoria en el servidor todo lo que esta inProc se puede eliminar para dejar un poco de "lugar"...

    Te recomendaria que coloques tus sesiones pro ejemplo en un servidor de session o incluso dentro de un sqlserver, para que no tengas problemas cuando estes modificando archivos.

    Pero para empezar podrias guarda en el mismo servidor o sea deberas configurar esa maquina como servidor en modo StateServer el sessionState (tambien esta en los enlaces mas abajo)

     

    Si puede ser que las variables de session las pierdas... porque si falta memoria en el servidor todo lo que esta inProc se puede eliminar para dejar un poco de "lugar"... basicamente estan en el mismo PROCESO y este proceso tiene la particularidad que se RECICLA.

    Te recomendaria que coloques tus sesiones por ejemplo en un servidor de session o incluso dentro de un sqlserver, para que no tenga problemas cuando estes modificando archivos, o para que no se pierdan las variables

    Para probar coloca en el modo StateServer en el mismo servidor y alli no se "perderan" de repente sino cuando deben... mas abajo coloco unos enlaces de este procedimiento

    Aqui tambien unas cosillas mas de un post anterior de la misma tematica.

     

    Bueno la session donde la guardas???

    -----------------------------------------------------------------------------

    ASP.NET admite tres modos de estado de sesión: (… 4 con Custom)

         - InProc
         - StateServer
         - SqlServer
         - Custom

                     

    Aqui estan:

         - InProc: el modo en proceso almacena valores en la memoria del proceso de trabajo de ASP.NET. Este modo ofrece el acceso más rápido a estos valores. Sin embargo, cuando el proceso de trabajo de ASP.NET se recicla se pierden los datos de estado.

         - StateServer: Como alternativa, el modo StateServer utiliza un servicio independiente de Microsoft Windows para almacenar variables de sesión. Como este servicio es independiente de Microsoft Internet Information Server (IIS), puede ejecutarse en un servidor diferente. Puede utilizar este modo en una solución de equilibrio de carga, ya que varios servidores Web pueden compartir variables de sesión. Aunque las variables de sesión no se pierden si reinicia IIS, el rendimiento se ve afectado cuando atraviesa los límites de proceso.

       - SqlServer: si le preocupa la persistencia de la información de sesión, puede utilizar el modo SqlServer para utilizar Microsoft SQL Server y asegurar así el máximo nivel de confiabilidad. El modo SqlServer es similar al modo fuera de proceso, excepto en que los datos de sesión se mantienen en SQL Server. El modo SqlServer también le permite utilizar un almacén de estados ubicado fuera del proceso de IIS y que puede residir en el equipo local o en un servidor remoto.

        - Existe un modo Custom, donde debes indicarle donde se guardaran las sessiones (nunca lo probe por eso no te puedo comentar muy bien) Donde se configura: en el web.config (como toda configuracion) je!

                   

    Y cuando se reinicia?

    ----------------------------------------------------------

    Dice que se reinicia cuando:

       - si se recicla el AppDomain,
       - o el proceso Aspnet wp.exe (o el proceso W3wp.exe)

      

    Cuando?

    ----------------------------------------------------------


         -    Varios atributos (por ejemplo el atributo memoryLimit) tienen configuraciones particulares en la sección  <processModel> del archivo de configuración. (aqui vale la pena aclarar que este cambio no surge efecto directamente como lo demas atributos del webconfig sino cuando se reinicia el proceso de trabajo)

    Se lo puede cambiar tambien desde interfaz grafico desde el grupo de aplicacciones desde la consola del IIS. pero creo que esto es para todas las webs del grupo de app pero no se cual tiene mas prioridad creo yo que el webconfig como todo.

    memoryLimit: Especifica, como porcentaje de la memoria total del sistema, el espacio de memoria máximo que el proceso de trabajo puede consumir antes de que ASP.NET inicie un nuevo proceso y reasigne las solicitudes pendientes. El valor predeterminado es 60.

         -   Se modificaron el Global.asax o el archivo Web.config.
         -   Se modificó el directorio Bin de la aplicación Web.
         -   La detección de virus de software tocó alguna información adicional en archivos de configuracion .config.

    El modo de sesión InProc indica que se almacena estado de la sesión localmente.

    Esto significa que con sesión InProc, se almacena realmente el modo de estado en objetos de vida en el AppDomain de la aplicación Web. Se debe esto a cuando se pierde al estado de sesión Aspnet wp.exe (o W3wp.exe para aplicaciones que se ejecutan en Servicios de Internet Information Server [IIS 6,0]) o se reinicia el AppDomain.

    Todo eso esta en este KB
        http://support.microsoft.com/?scid=kb;es;324772   

        INFO: Introducción a la administración de estados de ASP.NET
         http://support.microsoft.com/kb/307598/es  

     

                     

    Configuración de la agrupación de aplicaciones de reciclaje

    -------------------------------------------------------------------------------------------------------------

    Reciclar la configuración del grupo de aplicaciones:
    La configuración de la agrupación de aplicaciones de reciclaje permiten controlar el modo de recuperación de los recursos del sistema
    http://msdn2.microsoft.com/es-es/library/1dtw20e3.aspx  

    Process Model - Propiedades
    http://msdn2.microsoft.com/es-es/library/yk0c93w4.aspx   

    ProcessModelSection (Clase)
    La clase ProcessModelSection controla los distintos aspectos del proceso de trabajo de ASP.NET, incluidos el período de duración, el número de instancias creadas a la vez, bajo qué identidad de seguridad se ejecuta y el tamaño del grupo de subprocesos de CLR que se ocupa de las solicitudes.

    http://msdn2.microsoft.com/es-es/library/system.web.configuration.processmodelsection(VS.80).aspx



    Enlaces:

    -----------------------------------------

    ·         Modos de estado de sesión
    http://msdn2.microsoft.com/es-es/library/ms178586.aspx   

    ·         Elemento sessionState (Esquema de configuración de ASP.NET)
    http://msdn2.microsoft.com/es-es/library/h6bb9cz9.aspx  

    ·         ¿Por qué se reinicia mi aplicación ASP.NET?
    http://support.microsoft.com/?scid=kb;es;871042   

    ·         PRB: Datos de sesión se pierden cuando utiliza modo InProc de ASP.NET de estado de sesión
    http://support.microsoft.com/kb/324772/es  

    ·         PRB: Las variables de sesión se pierden intermitentemente en aplicaciones ASP.NET
    http://support.microsoft.com/kb/316148/es  

    ·         CÓMO PARA: Configura SQL Server a Store ASP.NET Session State
    http://support.microsoft.com/kb/317604/  

    ·          

     

     

    Espero que te sirva de ayuda o guia

     

     

     


    Jose. A Fernandez | blog: http://geeks.ms/blogs/fernandezja
    martes, 23 de junio de 2009 23:47
  • Aqui va otro post
    (que ayuda a entender mas lo que Venom_aa nos quiere decir)


    Parece el mismo timeout no?.. pero difieren 

        Authentication Timeout: Intervalo de tiempo en minutos tras el cual caduca la autenticación. El valor predeterminado es de 30 minutos. O sea el periodo de inactividad que el usuario puede realizar hasta que se le presente la pagina de login nuevamente. 
       SessionState Timeout: Obtiene y establece el tiempo de espera (en minutos) que se permite entre solicitudes antes de que el proveedor de estado de sesión termine la sesión. 
    Cuanto tiempo se debe mantener el estado de la session. 

    Que puede pasar que el SessionState Timeout sea menor que el Authentication Timeout, o sea la session se puede perder pero el usuario sigue autenticado (o sea no se pregunta por el login).. esto sucede cuando la session esta en modo InProc y "se pierden" algunos los valores de session (porque se "limpia" el proceso donde se esta ejecutando juanto con las variables) pero el usaurio sigue autenticado. 


    Espero que te sirva... 


    Enlaces
    ------------------------------

     ·         FormsAuthenticationConfiguration.Timeout (Propiedad)
    Obtiene o establece el tiempo de espera de autenticación.

    http://msdn.microsoft.com/es-es/library/system.web.configuration.formsauthenticationconfiguration.timeout(VS.80).aspx

     

    ·         Elemento authentication (Esquema de configuración de ASP.NET) 
    http://msdn2.microsoft.com/es-es/library/532aee0e.aspx   

     

    ·         HttpSessionState.Timeout (Propiedad)
    Obtiene y establece el tiempo de espera (en minutos) que se permite entre solicitudes antes de que el proveedor de estado de sesión termine la sesión. 
     http://msdn.microsoft.com/es-es/library/system.web.sessionstate.httpsessionstate.timeout(VS.80).aspx

     

     


    Jose. A Fernandez | blog: http://geeks.ms/blogs/fernandezja
    martes, 23 de junio de 2009 23:55
  • A mi me sucede lo msimo tienes alguna solucion?
    martes, 21 de mayo de 2013 20:38