web-dev-qa-db-ja.com

Grailsアプリケーションのセッションタイムアウトを設定する方法は?

Grailsアプリケーションのコントローラーの1つで、次のようにセッション変数のパラメーター値を保持しています。

session.myVariable = params.myValue

その後、アプリを積極的に使用している限り、さまざまなコントローラー/ GSPページから保存された値にアクセスできます。ただし、ブラウザウィンドウがまだ開いているにもかかわらず、しばらくアプリを使用しないと、セッション変数の値が失われます。

これは、セッションが期限切れになるために起こりますか?私は、ブラウザウィンドウがまだ開いているまでセッションが存続するという印象を受けていましたが、明らかに間違っていました。

Grailsアプリで定義したすべてのセッション変数が、ブラウザーを閉じるまで期限切れにならないようにするにはどうすればよいですか?セッションタイムアウトを手動で設定する方法はありますか?

回答ありがとうございます!

57
curd0

別のオプションはweb.xmlの変更です。事前に電話する必要があります

grails install-templates

次に、src/templates/war/web.xmlを編集し、サーブレットマッピング後に追加/変更します。

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

Session-timeoutの値は、単位として分を使用します。

83

数年早送り... Grails 3.0の場合、アプリケーション構成ファイルで ServerProperties を使用してセッションタイムアウトを設定します。

grails-app/conf/application.yml

_server:
   session:
      timeout: 3600  #seconds
_

デフォルト値:1800秒(30分)

getMaxInactiveInterval()を使用して、コントローラーから HttpSession のタイムアウトを確認します。

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

出力->_Timeout: 3600 seconds_

更新:Grails 3.1の変更の構成を編集

33
Dem Pilafian

現在の杯(2.x)には、セッションタイムアウトを設定するための非常に奇妙な設計アプローチがあります。一般的なアイデアはどれも素晴らしいものではありません。

  1. webxmlGrailsプラグイン内の「// session Timeout」セクションをコメントアウトし、Config.groovyに「sessionConfig.sessionTimeout =」を追加します。

  2. grails install-templates、web.xmlからsession-timeoutを削除、WebXmlConfig.groovyにタイムアウトを追加

  3. 修正を待ちます。 :/

同僚が次のコードを思い付きました。これは私にとってはうまく機能し、実際のソリューションが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ファイルで1行を許可することです。

session.timeout = 90;

乾杯。

7
Lord Voldemort

Grails 3.1.xでは、セッションタイムアウトは非推奨です。 application.ymlの正しいプロパティは次のとおりです。

server:
    session.timeout: 7200
2
Spencer McEwen

ここに、より効果的なソリューションがあります。 grailsホームディレクトリに移動して、例:E:\ grails-2.3.8\src\war\WEB-INF\web3.0.template.xmlを見つけ、セッションタイムアウト値を目的の値に編集します。

例:enter code here 90

1
user3833729

私は間違っている可能性がありますが、Grailsはアプリケーションコンテナに関連付けられたセッションを使用していると確信しています。たとえば、Tomcatを使用している場合、セッションの長さを指定できます。

Tomcatセッションの長さを変更するためのチュートリアル

1
Stefan Kendall

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
    }

}
0