8

ページを読み込むたびにsession_start()、現在のセッションを再開するために実行します。session.gc_maxlifetimeカウントはいつから始まりますか?初めてsession_start()呼び出され、そのセッションのCookieが設定されていますか?または、タイマーは毎回再起動しますsession_start()か?

このsession.gc_maxlifetimeタイムラインでセッションデータをガベージコレクションする必要がある場合は、約24分に設定します

 1. 12:00:00 First page load, session_start(), session cookie created
 2. 12:10:00 page load, session_start() 
 3. 12:26:00 page load, session_start()
 4. 12:55:00 page load, session_start()

タイマーが最初のページのロードで開始する場合、session_start()ロード3でガベージコレクションが発生すると予想されます。ただし、がリセットされるたびにリセットされるsession_start()と、ロード4まで収集されません。

後者の場合は、実行中のページを呼び出すために数分ごとにjavascriptハートビートを実行できるためsession_start()です。

前者の場合session.gc_maxlifetime、セッションCookieの作成からカウントを開始します。カウントをリセットするには、destroy / recreateまたはregenerate_idが必要ですか?

4

1 に答える 1

2

これは、最後のsession_start()呼び出しOR / ANDから、最後に書き込まれたときのものです。PHPガベージコレクターが削除する必要があるかどうかを判断するために使用する「最終変更」タイムスタンプが変更されるため、私の推測では後者になります。この場合、session_start()を使用する最後のスクリプトから終了までカウントを開始するか、session_ write_close()を呼び出してスクリプトの途中で明示的に終了します。

PSこれにより、その「ハートビート」が素晴らしくシンプルになります(1行で):http://prototypejs.org/api/ajax/periodicalUpdater

于 2012-10-30T19:40:26.660 に答える