セッションを特定の時間維持し、その後終了するには、カスタム セッション タイムアウトを実装することをお勧めします。このアプローチは、session.gc_maxlifetime や session.cookie_lifetime.
1 などのセッション設定に依存するよりも信頼性が高くなります。 session.gc_maxlifetime:
session.gc_maxlifetime は、セッション データが「ゴミ」とみなされて削除されるまでの時間を決定します。ただし、ガベージ コレクションは散発的に発生するため、セッションの有効期限を確認する方法としては信頼性が低くなります。
2. session.cookie_lifetime:
session.cookie_lifetime は、ブラウザに送信される Cookie の存続期間にのみ影響し、セッション自体には影響しません。セッションを無効にするのはクライアントではなくサーバーです。
推奨される解決策:
最後のアクティビティ時間を追跡するタイムスタンプを維持することで、カスタム セッション タイムアウトを実装します。このタイムスタンプはリクエストごとに更新します。
if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) { // last request was more than 30 minutes ago session_unset(); // unset $_SESSION variable for the run-time session_destroy(); // destroy session data in storage } $_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp
このメソッドは、アクティビティの 30 分後にセッション データを効果的に期限切れにし、ガベージ コレクターによる早期の削除を防ぎます。
セキュリティを強化するには、定期的に再生成することを検討してください。セッションの固定を防ぐためのセッションID
if (!isset($_SESSION['CREATED'])) { $_SESSION['CREATED'] = time(); } else if (time() - $_SESSION['CREATED'] > 1800) { // session started more than 30 minutes ago session_regenerate_id(true); // change session ID for the current session and invalidate old session ID $_SESSION['CREATED'] = time(); // update creation time }
注:
以上が30 分間非アクティブになった後に PHP セッションを効果的に期限切れにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。