2010-05-25 3 views
56

나는이 같은 세션 변수에 매개 변수 값을 유지하고있어 :Grails 애플리케이션에 세션 시간 초과를 구성하는 방법은 무엇입니까? 내 Grails 애플리케이션의 컨트롤러 중 하나에서

session.myVariable = params.myValue 

그 후, 나는만큼 다른 컨트롤러/GSP-페이지에서 저장된 값에 액세스 할 수 있습니다 나는 적극적으로 응용 프로그램을 사용합니다. 그러나 잠시 동안 내 앱을 사용하지 않으면 브라우저 창이 열려 있어도 세션 변수가 값을 잃어 버리게됩니다.

세션이 만료 되었기 때문에 이런 현상이 발생합니까? 나는 브라우저 창을 열 때까지 세션이 살아 있다는 인상을 받았다.하지만 분명히 틀렸다.

Grails 앱에서 정의한 모든 세션 변수가 브라우저가 닫힐 때까지 만료되지 않도록하려면 어떻게해야합니까? 수동으로 세션 시간 초과를 설정할 수있는 방법이 있습니까?

미리 답변 해 주셔서 감사합니다.

답변

81

또 다른 옵션은 web.xml을 수정 될 것이다. 세션 타임 아웃의

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

값은 단위로 분 사용 전에 당신은 서블릿 매핑 한 후 수정/편집의 SRC/템플릿/전쟁/web.xml 파일을

grails install-templates 

를 호출하고 추가해야합니다.

+0

고마워, 스테판! 그건 정확히 * 내가 찾던 내용입니다. 나는 web.xml을 얻기 위해 명시 적으로 'install-templates'를해야한다는 것을 모르고있었습니다. 나는 아직도 Grails에서 n00b이다. – curd0

+2

세션 타임 아웃도 처리하고 싶다. 나는 이것에 관해서 질문 할 뿐이다. web.xml 파일에서이를 구성하면 세션이 만료되고 컨트롤러의 작업이 실행되면 어떻게 될까요? @ curd0의 예제에서 session.myVariable이 null을 반환할까요? 감사! – Tomarto

+1

100 % 확신 할 수는 없지만, null이라고 생각합니다. –

1

내가 틀릴 수도 있지만, Grails는 애플리케이션 컨테이너와 관련된 세션을 사용하고 있다고 확신합니다. 예를 들어 Tomcat을 사용하는 경우 세션 길이를 지정할 수 있습니다.

Tutorial for changing Tomcat session length.

+0

Grails는 컨테이너의 세션을 사용하지 있었으나 결국 기본은 '아무튼 오버라이드 (override) grails는 디폴트를 오버라이드하는 새로운 서블릿 특정 web.xml을 생성하기 때문에 작동하지 않습니다. – codemonkey

5

현재의 grails (2.x)는 세션 타임 아웃을 설정하는 매우 이상한 설계 방식을 사용합니다. 일반적인 아이디어 중 어느 것도 큰되지 않습니다 :

  1. 주석으로 "// 세션 시간 초과"섹션하여 WebxmlGrails 플러그인 내에서 추가 "sessionConfig.sessionTimeout는 ="

  2. Grails를 설치 템플릿을 Config.groovy 파일을 web.xml에서 session-timeout을 제거하고 WebXmlConfig.groovy에서 시간 초과를 추가하십시오.

  3. 수정을 기다리는 중입니다. :/

공동 작업자 나를 위해 잘 작동하고 진정한 해결책은 Grails의 코어에 내장 될 때까지 할 것이다 다음 코드를 내놓았다.

config.groovy 파일 맨 아래에 다음을 추가하고 적절한 시간 초과를 설정하십시오.

session.timeout = 90; 

건배 :

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 파일에서 한 줄을 허용하는 것이 좋습니다.

+0

"** Build ** Config.groovy"하단에 다음을 추가 하시겠습니까? –

1

여기가 더 좋은 해결책입니다. grails 홈 디렉토리로 가서 을 찾으십시오. 예 : E : \ grails-2.3.8 \ SRC의 \ 전쟁 \ WEB-INF \ web3.0.template.xml 원하는 값으로 값을 세션 시간을 편집 :

예 : 몇 년 앞으로 enter code here

28

빠른 .. Grails 3.0의 경우 응용 프로그램 구성 파일에 세션 시간 초과를 ServerProperties으로 설정하십시오.

Grails의-앱/CONT/application.yml

server: 
    session: 
     timeout: 3600 #seconds 

기본값 : 1,800초 (30 분)

getMaxInactiveInterval()를 사용하여 컨트롤러로부터 HttpSession 대한 타임 아웃을 확인

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

출력 넣어 ->Timeout: 3600 seconds

업데이트 : 변경 편집 구성을

+2

실제로 서버입니다. 세션 : 시간 초과 : 3600 – Kimi

+0

감사합니다. @Kimi, 답변이 업데이트되었습니다. –

+0

세션 시간 초과를 비활성화하는 방법은 무엇입니까? @DemPilafian – akiong

2

Grails는 3.1 3.1.X의 세션 타임 아웃이되지 않습니다 Grails는. application.yml의 올바른 속성입니다 :

3 응용 프로그램, 개질 Application.groovy이 나를 위해 일 Grails에 대한
server: 
    session.timeout: 7200 
0

:

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 
    } 

} 
관련 문제