ユーザーが他のページを閲覧しても、20 分の有効期限はリセットされません。問題はこのコメントで説明されています:
session_set_cookie_params() を使用する場合、PHP のセッション コントロールはセッションの有効期間を正しく処理しないため、ユーザーがサイトにアクセスするたびにセッションの有効期限を変更する必要があります。では、ここで問題です。
$lifetime=600;
session_set_cookie_params($lifetime);
session_start();
このコードは、ユーザーがサイトに戻ったり、ページを更新したりしても、セッションの有効期間を変更しません。ユーザーが何度ページをリクエストしても、セッションは $lifetime 秒後に期限切れになります。したがって、次のようにセッション Cookie を上書きするだけです。
$lifetime=600;
session_start();
setcookie(session_name(),session_id(),time()+$lifetime);
これで、有効期間が適切な値に設定された同じセッション Cookie が作成されました。
ブラウザを閉じたときに Cookie の有効期限が切れるように、そのままにsession.cookie_lifetime
しておくことをお勧めします。0
そうしないと、ブラウザーを閉じるとセッションが終了すると想定しているユーザーは、20 分のタイムアウト前にブラウザーを再度開いたときに驚かれることでしょう。
gc_xxxx の設定に関する編集
gc_probability = 1、gc_divisor = 1、gc_maxlifetime = 1200
1/1
は、PHP が呼び出しごとにセッション ファイルの日付をチェックすることを意味しますsession_start
。
gc_probability = 1、gc_divisor = 100、gc_maxlifetime = 1200
1/100
つまり、PHP はセッション ファイルの日付をランダムにチェックしますが、およそ 100 回のsession_start
呼び出しごとに 1 回チェックします。
日付チェック自体は、セッション ファイルのアクセス時間を gc_maxlifetime と比較することで構成されます。過去 (例) 20 分間アクセスされていない場合、ファイルを削除します。
そうは言っても、タイムアウト (またはタイムアウトが 0 のときにブラウザーを閉じる) が原因で Cookie の有効期限が切れた場合、ブラウザーは期限切れのセッション ID Cookie の送信を停止するため、セッションはすぐに期限切れになります。その場合、PHP は新しいセッション ID Cookie を発行します。期限切れの Cookie に関連付けられたセッション ID ファイルは破棄され、アクセスできなくなります。したがって、上記のようにいつでもガベージコレクションが行われます。
最後に、(i) セッション ID Cookie の有効期限 (ii) を確認し、タイムアウトのある Cookie はページにアクセスしたり更新したりしても更新されないことを覚えておくことで、特定の問題を解決できます。