Как настроить тайм-аут сеанса для приложения Grails?
В одном из контроллеров моего приложения Grails я сохраняю значение параметра в переменной сеанса следующим образом:
session.myVariable = params.myValue
После этого я могу получить доступ к сохраненному значению с разных контроллеров/GSP-страниц, пока активно использую приложение. Однако, если я не использую свое приложение какое-то время, хотя окно моего браузера все еще открыто, переменная сеанса теряет значение.
Это происходит из-за истечения сеанса? Мне показалось, что сеанс продолжается до тех пор, пока окно браузера не будет открыто, но, видимо, я ошибся.
Что делать, чтобы все переменные сеанса, которые я определяю в приложении Grails, не истекают до закрытия браузера? Есть ли способ установить тайм-аут сеанса вручную?
Заранее благодарю за ваши ответы!
Ответы
Ответ 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
Ответ 5
Я мог ошибаться, но я уверен, что Grails использует сеансы, связанные с вашим контейнером приложений. Например, если вы используете Tomcat, вы можете указать длину сеанса.
Учебное пособие по изменению длины сеанса Tomcat.
Ответ 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
}
}