確かに、設定設定でのみそれを行う方法がありますが、Symfony2.1でのみです。進むべき道は、PHPに統合されたセッションのガベージコレクションを使用することです。ここでそれを達成する方法を説明します。
config.ymlファイルで、以下の変数を設定します。
framework:
session:
cookie_lifetime: 86400 # One day, cookie lifetime
gc_maxlifetime: 1800 # 30 minutes, session lifetime
gc_probability: 5
gc_divisor: 100
この設定では、ブラウザに送信されるCookieは1日有効です。ただし、セッションは30分続きます。セッションはリクエストごとに保存されるため、ライフタイムはリクエストごとに「再開」されます。そのため、セッションはリクエストごとに延長されます。
次に、ガベージコレクションの部分があります。そして、これはあなたがどれだけ正確になりたいかによっては「問題がある」可能性があります。プロパティgc_probability
とgc_divisor
は、ガベージコレクションが実行される頻度を制御します。これらの数値は、各セッションの初期化で5%(5/100、 gc_probability
/ )の確率でGCが実行されることを意味します。gc_divisor
これは、GCが実行されるときに、期限切れのセッションが削除されることを意味します。ただし、これは確率的な機能であるため、完全に制御することはできません。GCがまだ実行されていないため、指定した有効期間後も一部のセッションにアクセスできます。
これが問題になる場合は、リクエストごとにリスナーが必要であり、セッションがまだ有効であることを確認してください。セッション期限切れイベントがまだないため、セッションが期限切れになったときにユーザーにメッセージを表示する場合にも、これを行う必要があります。
私の答えはSymfony2.1でのみ有効になることを忘れないでください。2.0では、セッションの存続期間の値を検証するためのリクエストリスナーも必要になります。
ここに、セッションのアイドル時間に関するいくつかのリンクがあります。
- キープアライブセッションを紹介するPRのリンク:PR-2171
- セッションに関するドキュメント:こちら
- セッションのgcに関するPHPサイト:ここ
これがお役に立てば幸いです。
よろしく、マット