session - ¿Cómo configurar un tiempo de espera de sesión para la aplicación Grails?




session-variables session-timeout (5)

Avance rápido de unos años ... Para Grails 3.0, establezca el tiempo de espera de la sesión con ServerProperties en el archivo de configuración de la aplicación.

grails-app / conf / application.yml

server:
   session:
      timeout: 3600  #seconds

Valor predeterminado: 1800 segundos (30 minutos)

Verifique el tiempo de espera para la HttpSession desde un controlador utilizando getMaxInactiveInterval() :

log.println "Timeout: ${session.getMaxInactiveInterval()} seconds"

Salida -> Timeout: 3600 seconds

Actualización: configuración editada para cambios en Grails 3.1

En uno de los controladores de mi aplicación Grails estoy preservando un valor de parámetro en una variable de sesión como esta:

session.myVariable = params.myValue

Después de eso, puedo acceder al valor guardado desde diferentes controladores / páginas GSP siempre que use activamente la aplicación. Sin embargo, si no uso mi aplicación durante un tiempo, aunque la ventana de mi navegador aún esté abierta, la variable de sesión pierde su valor.

¿Esto sucede porque la sesión expira? Tenía la impresión de que una sesión vive hasta que la ventana del navegador todavía está abierta, pero aparentemente estaba equivocado.

¿Qué debo hacer para garantizar que todas las variables de sesión que defino en mi aplicación Grails no caduquen hasta que se cierre el navegador? ¿Hay alguna forma de establecer el tiempo de espera de la sesión manualmente?

¡Gracias de antemano por sus respuestas!


Con Grails 3.1.x session-timeout está en desuso. La propiedad correcta en application.yml es:

server:
    session.timeout: 7200

Otra opción sería modificar web.xml. Antes debe llamar

grails install-templates

Luego edite src / templates / war / web.xml y agregue / modifique después de la asignación de servlets:

<session-config>
   <session-timeout>60</session-timeout>
</session-config>

El valor de timeout de sesión usa minutos como unidad.


Para la aplicación Grails 3, la modificación de Application.groovy funcionó para mí:

package foo

import grails.boot.GrailsApp
import grails.boot.config.GrailsAutoConfiguration
import org.apache.catalina.Context
import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory
import org.springframework.boot.context.embedded.tomcat.TomcatContextCustomizer
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory
import org.springframework.context.annotation.Bean

class Application extends GrailsAutoConfiguration {

    static void main(String[] args) {
        GrailsApp.run(Application, args)
    }

    @Bean
    EmbeddedServletContainerFactory containerFactory() {
        TomcatEmbeddedServletContainerFactory containerFactory = new TomcatEmbeddedServletContainerFactory()

        containerFactory.addContextCustomizers(new TomcatContextCustomizer() {
            @Override
            void customize(Context context) {
                int oneWeekInMinute = 7 * 24 * 60
                context.setSessionTimeout(oneWeekInMinute)
            }
        });

        return containerFactory
    }

}

aquí hay una mejor solución de trabajo. ve a tu directorio principal de Grails y encuentra Ejemplo: E: \ grails-2.3.8 \ src \ war \ WEB-INF \ web3.0.template.xml edita el valor de tiempo de espera de la sesión a los valores deseados:

Ejemplo: enter code here 90







session-timeout