Подтвердить что ты не робот

Как настроить тайм-аут сеанса для приложения Grails?

В одном из контроллеров моего приложения Grails я сохраняю значение параметра в переменной сеанса следующим образом:

session.myVariable = params.myValue

После этого я могу получить доступ к сохраненному значению с разных контроллеров/GSP-страниц, пока активно использую приложение. Однако, если я не использую свое приложение какое-то время, хотя окно моего браузера все еще открыто, переменная сеанса теряет значение.

Это происходит из-за истечения сеанса? Мне показалось, что сеанс продолжается до тех пор, пока окно браузера не будет открыто, но, видимо, я ошибся.

Что делать, чтобы все переменные сеанса, которые я определяю в приложении Grails, не истекают до закрытия браузера? Есть ли способ установить тайм-аут сеанса вручную?

Заранее благодарю за ваши ответы!

4b9b3361

Ответ 1

Другой вариант - изменить web.xml. Прежде чем вы должны позвонить

grails install-templates

Затем отредактируйте src/templates/war/web.xml и добавьте/измените после сервлет-сопоставления:

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

Значение тайм-аута сеанса использует минуты как единицу.

Ответ 2

Перемотка вперед на несколько лет... Для Grails 3.0 установите время ожидания сеанса с помощью ServerProperties в файле конфигурации приложения.

Grails-приложение /CONF/application.yml

server:
   session:
      timeout: 3600  #seconds

Значение по умолчанию: 1800 секунд (30 минут)

Проверьте время ожидания для HttpSession от контроллера, используя getMaxInactiveInterval():

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

Выход → Timeout: 3600 seconds

Обновление: отредактированная конфигурация для изменений в Grails 3.1

Ответ 3

Современные grails (2.x) имеют очень необычный подход к настройке таймаута сеанса. Ни одна из преобладающих идей не прекрасна:

  • закомментируйте раздел "//Время ожидания сеанса" внутри плагина WebxmlGrails и добавьте "sessionConfig.sessionTimeout =" в Config.groovy

  • grails install-templates, удалить сеанс-тайм-аут из web.xml, добавить таймаут в WebXmlConfig.groovy

  • дождитесь исправления.:/

Сотрудник придумал следующий код, который хорошо работает для меня и будет делать, пока реальное решение не будет встроено в ядро ​​grails.

Просто добавьте следующее в конец файла config.groovy, а затем установите соответствующий тайм-аут.

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

My Я предлагаю, чтобы правильное решение состояло в том, чтобы разрешить одну строку в файле Config.groovy:

session.timeout = 90;

Приветствия.

Ответ 4

В Grails 3.1.x тайм-аут сеанса устарел. Правильное свойство в application.yml:

server:
    session.timeout: 7200

Ответ 6

здесь лучшее рабочее решение. отправляйтесь в свой домашний справочник grails и найдите Пример: E:\grails-2.3.8\src\war\WEB-INF\web3.0.template.xml отредактируйте значение времени ожидания сеанса до желаемых значений:

Пример:       enter code here      90   

Ответ 7

Для приложения Grails 3 изменение Application.groovy работало для меня:

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
    }

}