Comment configurer un délai d’expiration de session pour l’application Grails?

Dans l’un des contrôleurs de mon application Grails, je conserve une valeur de paramètre dans une variable de session comme ceci:

session.myVariable = params.myValue 

Après cela, je peux accéder à la valeur enregistrée depuis différents contrôleurs / pages SPG tant que je l’utilise activement. Cependant, si je n’utilise pas mon application pendant un certain temps, même si la fenêtre de mon navigateur est toujours ouverte, la variable de session perd sa valeur.

Est-ce que cela se produit parce que la session expire? J’avais l’impression qu’une session se poursuit jusqu’à ce que la fenêtre du navigateur soit encore ouverte, mais apparemment je me suis trompé.

Que dois-je faire pour garantir que toutes les variables de session que je définis dans mon application Grails n’expirent pas tant que le navigateur n’est pas fermé? Est-il possible de définir manuellement le délai d’expiration de la session?

Merci d’avance pour vos réponses!

Une autre option serait de modifier web.xml. Avant vous devez appeler

 grails install-templates 

Ensuite, éditez src / templates / war / web.xml et ajoutez / modifiez après le mappage de servlet:

  60  

La valeur de session-timeout utilise les minutes comme unité.

Quelques années plus tard … Pour Grails 3.0, définissez le délai d’expiration de la session avec ServerProperties dans le fichier de configuration de l’application.

grails-app / conf / application.yml

 server: session: timeout: 3600 #seconds 

Valeur par défaut: 1800 secondes (30 minutes)

Vérifiez le délai d’expiration de la session HttpSession à partir d’un contrôleur utilisant getMaxInactiveInterval() :

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

Sortie -> Timeout: 3600 seconds

Mise à jour: configuration modifiée pour les modifications dans Grails 3.1

Les grils actuels (2.x) ont une approche de conception très étrange pour définir le délai de session. Aucune des idées dominantes ne sont excellentes:

  1. commentez “// session timeout” section dans le plug-in WebxmlGrails et ajoutez “sessionConfig.sessionTimeout =” à Config.groovy

  2. grails install-templates, supprime le timeout de session de web.xml, ajoute le timeout dans WebXmlConfig.groovy

  3. Attendez un correctif. : /

Un collègue est venu avec le code suivant qui fonctionne bien pour moi et le fera jusqu’à ce qu’une vraie solution soit intégrée au kernel de grails.

Ajoutez simplement ce qui suit au bas de votre fichier config.groovy, puis définissez le délai d’attente approprié.

 grails.war.resources = { stagingDir, args -> def webXML = new java.io.File("${stagingDir}/WEB-INF/web.xml") webXML.text = webXML.text.replaceFirst("30", "90") } 

Je suggère que la solution correcte consiste à autoriser une seule ligne dans le fichier Config.groovy:

 session.timeout = 90; 

À votre santé.

Avec Grails 3.1.x, le délai de session est obsolète. La propriété correcte dans application.yml est la suivante:

 server: session.timeout: 7200 

Je peux me tromper, mais je suis sûr que Grails utilise les sessions associées à votre conteneur d’application. Si vous utilisez Tomcat, par exemple, vous pouvez spécifier la durée d’une session.

Tutoriel pour modifier la longueur de session Tomcat.

voici une meilleure solution de travail. allez dans votre répertoire personnel grails et trouvez Exemple: E: \ grails-2.3.8 \ src \ war \ WEB-INF \ web3.0.template.xml éditez la valeur du délai d’expiration de la session aux valeurs souhaitées:

Exemple: enter code here 90

Pour l’application Grails 3, la modification du fichier Application.groovy fonctionné pour moi:

 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(Ssortingng[] 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 } }