1

私は標準remember_meのsymfony機能を使用していますが、configで設定されている期間ごとに期限切れになります。たとえばlifetime、1800に設定しました。何をしているかに関係なく、最後のログインから0.5時間後にログオフします。そして、私はそれが0.5時間の非アクティブの後にのみ私をログオフさせたいです。

すべてのリクエストは、私にクッキーを覚えておくのを長引かせる必要があります。

これは設定だけで実行できますか、それともカーネルイベントをいじって手動でハックする必要がありますか?

4

1 に答える 1

4

確かに、設定設定でのみそれを行う方法がありますが、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_probabilitygc_divisorは、ガベージコレクションが実行される頻度を制御します。これらの数値は、各セッションの初期化で5%(5/100、 gc_probability/ )の確率でGCが実行されることを意味します。gc_divisor

これは、GCが実行されるときに、期限切れのセッションが削除されることを意味します。ただし、これは確率的な機能であるため、完全に制御することはできません。GCがまだ実行されていないため、指定した有効期間後も一部のセッションにアクセスできます。

これが問題になる場合は、リクエストごとにリスナーが必要であり、セッションがまだ有効であることを確認してください。セッション期限切れイベントがまだないため、セッションが期限切れになったときにユーザーにメッセージを表示する場合にも、これを行う必要があります。

私の答えはSymfony2.1でのみ有効になることを忘れないでください。2.0では、セッションの存続期間の値を検証するためのリクエストリスナーも必要になります。

ここに、セッションのアイドル時間に関するいくつかのリンクがあります。

  1. キープアライブセッションを紹介するPRのリンク:PR-2171
  2. セッションに関するドキュメント:こちら
  3. セッションのgcに関するPHPサイト:ここ

これがお役に立てば幸いです。

よろしく、マット

于 2012-09-26T18:01:54.307 に答える