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



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



session.myVariable = params.myValue


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



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



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



заранее спасибо за ваши ответы!

467   7  

7 ответов:

другой вариант будет изменять веб.XML. До этого вы должны позвонить

grails install-templates

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

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

значение session-timeout использует минуты в качестве единицы измерения.

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

grails-app/conf / application.в формате YML

server:
   session:
      timeout: 3600  #seconds

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

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

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

выход --> Timeout: 3600 seconds

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

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

  1. закомментируйте раздел " / / Session Timeout "в плагине WebxmlGrails и добавьте" sessionConfig.значения параметра sessiontimeout=" в конфиге.groovy

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

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

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

просто добавьте следующее В нижней части конфигурации.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>")
}

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

session.timeout = 90;

Ура.

Использовать Grails 3.1.Х сессии тайм-аут является устаревшим. Правильное свойство в приложение.в формате YML - это:

server:
    session.timeout: 7200

Я могу ошибаться, но я уверен, что Grails использует сеансы, связанные с вашим контейнером приложений. Например, если вы используете Tomcat, вы можете указать длину сеанса.

учебник для изменения длины сеанса Tomcat.

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

пример: enter code here Девяносто

для приложения 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
    }

}

Comments

    Ничего не найдено.