cur*_*rd0 58 session grails session-variables session-timeout
在我的Grails应用程序中的一个控制器中,我在会话变量中保留一个参数值,如下所示:
session.myVariable = params.myValue
Run Code Online (Sandbox Code Playgroud)
之后,只要我主动使用该应用程序,我就可以从不同的控制器/ GSP页面访问保存的值.但是,如果我暂时不使用我的应用程序,即使我的浏览器窗口仍处于打开状态,会话变量也会失去它的值.
会发生这种情况是因为会话到期了吗?我的印象是会话一直存在,直到浏览器窗口仍然打开,但显然我错了.
我该怎么做才能确保我在Grails应用程序中定义的所有会话变量在浏览器关闭之前不会过期?有没有办法手动设置会话超时?
提前感谢您的回答!
Ste*_*ter 84
另一种选择是修改web.xml.之前你必须打电话
grails install-templates
Run Code Online (Sandbox Code Playgroud)
然后编辑src/templates/war/web.xml并在servlet-mapping之后添加/修改:
<session-config>
<session-timeout>60</session-timeout>
</session-config>
Run Code Online (Sandbox Code Playgroud)
session-timeout的值使用分钟作为单位.
Dem*_*ian 35
快进几年......对于Grails 3.0 ,在应用程序配置文件中使用ServerProperties设置会话超时.
的grails-app/CONF/application.yml
server:
session:
timeout: 3600 #seconds
Run Code Online (Sandbox Code Playgroud)
默认值:1800秒(30分钟)
使用以下命令验证来自控制器
的HttpSession超时getMaxInactiveInterval():
log.println "Timeout: ${session.getMaxInactiveInterval()} seconds"
Run Code Online (Sandbox Code Playgroud)
输出 - > Timeout: 3600 seconds
更新:为Grails 3.1中的更改编辑了配置
小智 7
当前的grails(2.x)有一个非常奇怪的设计方法来设置会话超时.流行的想法都不是很好:
在WebxmlGrails插件中注释掉"// session Timeout"部分,并将"sessionConfig.sessionTimeout ="添加到Config.groovy
grails install-templates,从web.xml中删除session-timeout,在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>")
}
Run Code Online (Sandbox Code Playgroud)
我建议正确的解决方案是在Config.groovy文件中允许一行:
session.timeout = 90;
Run Code Online (Sandbox Code Playgroud)
干杯.
| 归档时间: |
|
| 查看次数: |
35628 次 |
| 最近记录: |