如何为Grails应用程序configuration会话超时?

在我的Grails应用程序中的一个控制器中,我在会话variables中保存了一个参数值,如下所示:

session.myVariable = params.myValue 

之后,我可以从不同的控制器/ GSP页面访问保存的值,只要我积极使用应用程序。 但是,如果我暂时不使用我的应用程序,即使浏览器窗口仍处于打开状态,会话variables也会失去它的值。

这是否因为会话过期而发生? 我的印象是,一个会话直到浏览器窗口仍然打开,但显然我错了。

我应该怎么做以确保我在Grails应用程序中定义的所有会话variables在浏览器closures之前不会过期? 有没有办法手动设置会话超时?

预先感谢您的回答!

另一个select是修改web.xml。 之前你必须打电话

 grails install-templates 

然后编辑src / templates / war / web.xml并在servlet-mapping之后添加/修改:

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

session-timeout的值以分钟为单位。

快进了几年…对于Grails 3.0,在应用程序configuration文件中使用ServerProperties设置会话超时。

的grails-app / CONF / application.yml

 server: session: timeout: 3600 #seconds 

默认值: 1800秒(30分钟)

使用getMaxInactiveInterval()从控制器validationHttpSession的超时:

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

输出 – > Timeout: 3600 seconds

更新:修改了Grails 3.1的configuration

目前的grails(2.x)有一个非常奇怪的devise方法来设置会话超时。 没有一个stream行的想法是伟大的:

  1. 在WebxmlGrails插件内注释掉“// session Timeout”部分并将“sessionConfig.sessionTimeout =”添加到Config.groovy

  2. grails install-templates,从web.xml中删除session-timeout,在WebXmlConfig.groovy中添加超时

  3. 等待修复。 :/

一位同事想出了以下代码,这个代码对我来说很好,直到一个真正的解决scheme被构build到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>") } 

我build议正确的解决scheme是允许Config.groovy文件中的一行:

 session.timeout = 90; 

干杯。

使用Grails 3.1.x会话超时已被弃用。 application.yml中的正确属性是:

 server: session.timeout = 7200 

我可能是错的,但我很确定Grails使用与您的应用程序容器关联的会话。 例如,如果您使用Tomcat,则可以指定会话的长度。

改变Tomcat会话长度的教程。

这是一个更好的工作解决scheme。 例如:E:\ grails-2.3.8 \ src \ war \ WEB-INF \ web3.0.template.xml将会话超时值编辑为所需的值:

例如: enter code here 90

对于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 } }