¿Cómo configurar un tiempo de espera de sesión para la aplicación Grails?
En uno de los controladores de mi aplicación Grails conservo 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 y cuando utilice activamente la aplicación. Sin embargo, si no utilizo mi aplicación durante un tiempo, a pesar de que la ventana de mi navegador todavía 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 el la ventana del navegador sigue abierta, pero al parecer me equivoqué.
¿Qué debo hacer para asegurarme de que todas las variables de sesión que defina 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!
7 answers
Otra opción sería modificar web.XML. Antes debe llamar
grails install-templates
Luego edite src/templates/war/web.xml y añadir / modificar después de servlet-mapping:
<session-config>
<session-timeout>60</session-timeout>
</session-config>
El valor de session-timeout usa minutos como unidad.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-25 20:12:48
Avance rápido 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 el HttpSession desde un controlador usando
getMaxInactiveInterval()
:
log.println "Timeout: ${session.getMaxInactiveInterval()} seconds"
Salida --> Timeout: 3600 seconds
Actualización: Configuración editada para cambios en Grails 3.1
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-01 21:53:23
Los griales actuales (2.x) tener un enfoque de diseño muy extraño para establecer el tiempo de espera de la sesión. Ninguna de las ideas predominantes son grandes:
-
Comente la sección " / / session Timeout "dentro del plugin WebxmlGrails y agregue" sessionConfig.SessionTimeout= " to Config.groovy
-
Grails install-templates, remove session-timeout from web.xml, añadir tiempo de espera en WebXmlConfig.groovy
Espera una dosis. :/
Un compañero de trabajo se le ocurrió la siguiendo el código que funciona bien para mí y lo hará hasta que una solución real esté integrada en grails core.
Simplemente agregue lo siguiente al final de su configuración.groovy archivo y luego establecer el tiempo de espera apropiado.
grails.war.resources = { stagingDir, args ->
def webXML = new java.io.File("${stagingDir}/WEB-INF/web.xml")
webXML.text = webXML.text.replaceFirst("<session-timeout>30</session-timeout>", "<session-timeout>90</session-timeout>")
}
Mi sugiero que la solución correcta es permitir una sola línea en la configuración.archivo groovy:
session.timeout = 90;
Saludos.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-27 22:41:43
Con Griales 3.1.x session-timeout está obsoleto. La propiedad correcta en la aplicación .yml es:
server:
session.timeout: 7200
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-08 15:15:54
Podría estar equivocado, pero estoy bastante seguro de que Grails usa las sesiones asociadas con su contenedor de aplicaciones. Si está utilizando Tomcat, por ejemplo, puede especificar la duración de una sesión.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-25 18:49:23
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.plantilla.xml edite el valor de tiempo de espera de la sesión a los valores deseados:
Ejemplo:
enter code here
90
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-13 06:49:07
Para la aplicación Grails 3, modificar el 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
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-02 14:25:25