Jak skonfigurować limit czasu sesji dla aplikacji Grails?

W Jednym ze sterowników w mojej aplikacji Grails zachowuję wartość parametru w zmiennej sesyjnej takiej jak Ta:

session.myVariable = params.myValue

Następnie mogę uzyskać dostęp do zapisanej wartości z różnych kontrolerów / stron GSP, o ile aktywnie korzystam z aplikacji. Jeśli jednak nie używam aplikacji przez jakiś czas, mimo że moje okno przeglądarki jest nadal otwarte, zmienna sesji traci swoją wartość.

Czy dzieje się tak, ponieważ sesja wygasa? Miałem wrażenie, że sesja trwa do okno przeglądarki jest nadal otwarte, ale najwyraźniej się myliłem.

Co zrobić, aby wszystkie zmienne sesji zdefiniowane w aplikacji Grails nie wygasły, dopóki przeglądarka nie zostanie zamknięta? Czy istnieje sposób ręcznego ustawienia limitu czasu sesji?

Z góry dziękuję za odpowiedzi!

Author: Shashank Agrawal, 2010-05-25

7 answers

Inną opcją byłoby zmodyfikowanie www.xml. Przed musisz zadzwonić

grails install-templates

Następnie Edytuj src / templates/war / web.xml i dodaj/zmodyfikuj po mapowaniu servleta:

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

Wartość session-timeout używa minut jako jednostki.

 82
Author: Stefan Armbruster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-25 20:12:48

Przewiń do przodu o kilka lat... Dla Grails 3.0 ustaw limit czasu sesji za pomocą ServerProperties w pliku konfiguracyjnym aplikacji.

Grails-app / conf / application.yml

server:
   session:
      timeout: 3600  #seconds

Wartość domyślna: 1800 sekund (30 minut)

Sprawdzenie limitu czasu dla HttpSession z kontrolera za pomocą getMaxInactiveInterval():

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

Wyjście --> Timeout: 3600 seconds

Aktualizacja: edytowana konfiguracja zmian w Grails 3.1

 31
Author: Dem Pilafian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-01 21:53:23

The current grails (2.x) mają bardzo dziwne podejście projektowe do ustawiania limitu czasu sesji. Żaden z panujących pomysłów nie jest wielki:

  1. Skomentuj sekcję "/ / session Timeout "wewnątrz wtyczki WebxmlGrails i dodaj" sessionConfig.sessionTimeout= " do Config.groovy

  2. Grails install-templates, remove session-timeout from web.xml, dodaj timeout w WebXmlConfig.groovy

  3. Poczekaj na naprawę. :/

Współpracownik wymyślił po kod, który działa dobrze dla mnie i będzie zrobić, aż prawdziwe rozwiązanie jest wbudowany w Grails core.

Po prostu dodaj następujące elementy na dole konfiguracji.groovy pliku, a następnie ustawić odpowiedni timeout.

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

Sugeruję, że poprawnym rozwiązaniem jest dopuszczenie pojedynczej linii w konfiguracji.plik groovy:

session.timeout = 90;
Zdrówko.
 6
Author: Lord Voldemort,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-27 22:41:43

Z Grails 3.1.X session-timeout jest przestarzały. Poprawną właściwość w aplikacji .yml to:

server:
    session.timeout: 7200
 2
Author: Spencer McEwen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-08 15:15:54

Mogę się mylić, ale jestem prawie pewien, że Grails używa sesji związanych z Twoim kontenerem aplikacji. Na przykład, jeśli używasz programu Tomcat, możesz określić długość sesji.

Samouczek zmiany długości sesji Tomcat.

 1
Author: Stefan Kendall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-25 18:49:23

Oto lepsze rozwiązanie. idź do katalogu domowego grails i znajdź Przykład: E:\grails-2.3.8\src\war\WEB-INF\web3.0.szablon.xml edytuje wartość czasu sesji do żądanych wartości:

Przykład: enter code here 90

 1
Author: user3833729,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-13 06:49:07

Dla aplikacji Grails 3, modyfikacja Application.groovy zadziałała dla mnie:

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
Author: Shashank Agrawal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-02 14:25:25