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:
commentez “// session timeout” section dans le plug-in WebxmlGrails et ajoutez “sessionConfig.sessionTimeout =” à Config.groovy
grails install-templates, supprime le timeout de session de web.xml, ajoute le timeout dans WebXmlConfig.groovy
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 } }