wake-up-neo.com

So konfigurieren Sie ein Sitzungszeitlimit für die Grails-Anwendung

In einem der Controller in meiner Grails-Anwendung bewahre ich einen Parameterwert in einer Sitzungsvariablen wie folgt auf:

session.myVariable = params.myValue

Danach kann ich von verschiedenen Controllern/GSP-Seiten auf den gespeicherten Wert zugreifen, solange ich die App aktiv nutze. Wenn ich meine App jedoch längere Zeit nicht verwende, obwohl mein Browserfenster noch geöffnet ist, verliert die Sitzungsvariable ihren Wert.

Kommt dies vor, weil die Sitzung abläuft? Ich hatte den Eindruck, dass eine Sitzung lebt, bis das Browserfenster noch geöffnet ist, aber anscheinend habe ich mich geirrt.

Was muss ich tun, um sicherzustellen, dass alle Sitzungsvariablen, die ich in meiner Grails-App definiere, nicht verfallen, bis der Browser geschlossen wird? Gibt es eine Möglichkeit, das Sitzungszeitlimit manuell einzustellen?

Vielen Dank im Voraus für Ihre Antworten!

57
curd0

Eine weitere Option wäre das Ändern von web.xml. Vorher müssen Sie anrufen

grails install-templates

Bearbeiten Sie dann src/templates/war/web.xml und fügen Sie das Servlet-Mapping hinzu:

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

Der Wert für das Session-Timeout verwendet Minuten als Einheit.

82

Schneller Vorlauf einige Jahre ... Für Grails 3.0 legen Sie das Sitzungszeitlimit mit ServerProperties in der Anwendungskonfigurationsdatei fest.

grails-app/conf/application.yml

server:
   session:
      timeout: 3600  #seconds

Standardwert: 1800 Sekunden (30 Minuten)

Überprüfen Sie das Timeout für die HttpSession von einem Controller mit getMaxInactiveInterval()

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

Ausgabe -> Timeout: 3600 seconds

Update: Bearbeitete Konfiguration für Änderungen in Grails 3.1

32
Dem Pilafian

Die aktuellen Grails (2.x) haben einen sehr ungewöhnlichen Entwurfsansatz zum Einstellen des Sitzungszeitlimits. Keine der vorherrschenden Ideen sind großartig:

  1. kommentieren Sie den Abschnitt "// Session Timeout" im WebxmlGrails-Plugin aus und fügen Sie "sessionConfig.sessionTimeout =" zu Config.groovy hinzu

  2. grails-Installationsvorlagen, Entfernen von Session-Timeout aus web.xml, Hinzufügen von Timeout in WebXmlConfig.groovy

  3. warten Sie auf eine Lösung. : /

Ein Mitarbeiter hat den folgenden Code entwickelt, der für mich gut geeignet ist und so lange funktionieren wird, bis eine echte Lösung in Grails Core eingebaut ist. 

Fügen Sie einfach das Folgende am Ende Ihrer config.groovy-Datei hinzu und stellen Sie dann das entsprechende Timeout ein.

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>")
}

Meiner Meinung nach ist die richtige Lösung, eine einzige Zeile in der Datei Config.groovy zuzulassen:

session.timeout = 90;

Prost.

6
Lord Voldemort

Mit Grails 3.1.x ist das Sitzungszeitlimit veraltet. Die richtige Eigenschaft in application.yml lautet:

server:
    session.timeout: 7200
2
Spencer McEwen

hier ist eine besser funktionierende Lösung. Gehen Sie zu Ihrem Grails-Home-Verzeichnis und suchen Sie nach Beispiel: E:\grails-2.3.8\src\war\WEB-INF\web3.0.template.xml Ändern Sie den Wert für die Sitzungszeitüberschreitung auf die gewünschten Werte:

Beispiel: enter code here 90

1
user3833729

Ich könnte falsch liegen, aber ich bin ziemlich sicher, dass Grails die Sitzungen verwendet, die Ihrem Anwendungscontainer zugeordnet sind. Wenn Sie beispielsweise Tomcat verwenden, können Sie die Länge einer Sitzung angeben.

Tutorial zum Ändern der Tomcat-Sitzungslänge.

1
Stefan Kendall

Für die Grails 3-Anwendung hat das Ändern des Application.groovy für mich funktioniert:

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
    }

}
0