Configuring the Session TTL

Symfony by default will use PHP's ini setting session.gc_maxlifetime as session lifetime. However if you store sessions in a database you can also configure your own TTL in the framework configuration or even at runtime.

デフォルトでは、symfony は PHP の ini 設定 session.gc_maxlifetime 評価ライフタイムを使用します。ただし、セッションをデータベースに保存する場合は、フレームワーク構成または実行時に独自の TTL を構成することもできます。

Changing the ini setting is not possible once the session is started so if you want to use a different TTL depending on which user is logged in, you really need to do it at runtime using the callback method below.

セッションが開始されると ini 設定を変更することはできないため、ログインしているユーザーに応じて異なる TTL を使用する場合は、以下のコールバック メソッドを使用して実行時に変更する必要があります。

Configuring the TTL

You need to pass the TTL in the options array of the session handler you are using:

使用しているセッション ハンドラーの options 配列に TTL を渡す必要があります。
  • YAML
    YAML
  • XML
    XML
  • PHP
    PHP
1
2
3
4
5
6
7
# config/services.yaml
services:
    # ...
    Symfony\Component\HttpFoundation\Session\Storage\Handler\RedisSessionHandler:
        arguments:
            - '@Redis'
            - { 'ttl': 600 }

Configuring the TTL dynamically at runtime

If you would like to have a different TTL for different users or sessions for whatever reason, this is also possible by passing a callback as the TTL value. The callback then has to return an integer which will be used as TTL.

何らかの理由で異なるユーザーまたはセッションに異なる TTL を設定したい場合は、コールバックを TTL 値として渡すことによっても可能です。コールバックは、TTL として使用される整数を返す必要があります。

The callback will be called right before the session is written.

コールバックは、セッションが書き込まれる直前に呼び出されます。
  • YAML
    YAML
  • XML
    XML
  • PHP
    PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
# config/services.yaml
services:
    # ...
    Symfony\Component\HttpFoundation\Session\Storage\Handler\RedisSessionHandler:
        arguments:
            - '@Redis'
            - { 'ttl': !closure '@my.ttl.handler' }
     
    my.ttl.handler:
        class: Some\InvokableClass # some class with an __invoke() method
        arguments:
            # Inject whatever dependencies you need to be able to resolve a TTL for the current session
            - '@security'