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

时间:2010-05-25 18:45:48

标签: session grails session-variables session-timeout

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

session.myVariable = params.myValue

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

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

我应该怎样做才能确保我在Grails应用中定义的所有会话变量在浏览器关闭之前不会过期?有没有办法手动设置会话超时?

提前感谢您的回答!

7 个答案:

答案 0 :(得分:82)

另一种选择是修改web.xml。之前你必须致电

grails install-templates

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

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

session-timeout的值使用分钟作为单位。

答案 1 :(得分:33)

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

<强>的grails-app / CONF / application.yml

server:
   session:
      timeout: 3600  #seconds

默认值: 1800 秒(30分钟)

使用控制器验证HttpSession的超时 getMaxInactiveInterval()

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

输出 - &gt;的 Timeout: 3600 seconds

更新:为Grails 3.1

中的更改编辑了配置

答案 2 :(得分:6)

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

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

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

  3. 等待修复。 :/

  4. 一位同事想出了以下适用于我的代码,直到将一个真正的解决方案构建到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>")
    }
    

    我建议正确的解决方案是在Config.groovy文件中允许一行:

    session.timeout = 90;
    

    干杯。

答案 3 :(得分:2)

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

server:
    session.timeout: 7200

答案 4 :(得分:1)

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

Tutorial for changing Tomcat session length.

答案 5 :(得分:1)

这是一个更好的工作解决方案。去你的grails主目录,找到 示例:E:\ grails-2.3.8 \ src \ war \ WEB-INF \ web3.0.template.xml将会话超时值编辑为所需的值:

实施例:         enter code here         90     

答案 6 :(得分:0)

对于Grails 3应用程序,修改spend_sw['Maint Start Date'] = spend_sw[spend_sw['Maint Start Date'] == '02/29/2008'].apply(lambda x: pd.datetime(x['Maint Start Date'].year , x['Maint Start Date'].month, x['Maint Start Date'].day - 1), axis=1) 为我工作:

Application.groovy