Как настроить тайм-аут сеанса для приложения Grails?
в одном из контроллеров в моем приложении Grails я сохраняю значение параметра в переменной сеанса следующим образом:
session.myVariable = params.myValue
после этого я могу получить доступ к сохраненному значению с разных контроллеров/GSP-страниц, пока я активно использую приложение. Однако, если я не использую свое приложение некоторое время, даже если мое окно браузера все еще открыто, переменная сеанса теряет свое значение.
это происходит из-за истечения срока действия сеанса? У меня сложилось впечатление, что сеанс живет, пока окно браузера все еще открыто, но, видимо, я ошибся.
что я должен сделать, чтобы гарантировать, что все переменные сеанса, которые я определяю в своем приложении Grails, не истекают, пока браузер не будет закрыт? Есть ли способ установить тайм-аут сеанса вручную?
заранее спасибо за ваши ответы!
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) есть очень странный подход к дизайну для установки таймаута сеанса. Ни одна из преобладающих идей не велика:
закомментируйте раздел " / / Session Timeout "в плагине WebxmlGrails и добавьте" sessionConfig.значения параметра sessiontimeout=" в конфиге.groovy
grails install-templates, удалить сеанс-тайм-аут из интернета.xml, добавить тайм-аут в WebXmlConfig.groovy
ждать исправления. :/
сотрудник придумал следующий код, который хорошо работает для меня и будет делать, пока реальное решение не будет встроено в ядро 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, вы можете указать длину сеанса.
вот лучшее рабочее решение. идите вы в свой домашний каталог 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