30 分後に PHP セッションを効果的に期限切れにする方法
PHP にはセッションの有効期限について session.gc_maxlifetime や session.cookie_lifetime などのオプションが用意されていますが、それらは完全に信頼できるわけではありません。ここでは、独自のセッション タイムアウト メカニズムを実装するための包括的なアプローチを示します。
PHP の組み込みオプションに関する問題:
カスタム セッション タイムアウトの実装:
セッションを期限切れにする最も効果的な方法一定期間非アクティブな状態が続いた後のセッションには、独自のタイムアウト メカニズムを実装します。これには、最後のアクティビティ (リクエスト) のタイムスタンプを維持し、リクエストごとにタイムスタンプを更新することが含まれます。最後のアクティビティが 30 分以上前である場合は、セッションの設定を解除して破棄できます。
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
セッション データを継続的に更新することで、セッション ファイルの変更日がガベージ コレクターによって途中で削除されるのを防ぐことができます。
追加のセキュリティ対策:
セッション固定などの攻撃を防ぐには、 $_SESSION['CREATED'] タイムスタンプを更新することでセッション 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 サイトの他の関連記事を参照してください。