ホームページ >バックエンド開発 >PHPチュートリアル >30 分後の PHP セッションの有効期限を確実に管理するにはどうすればよいですか?

30 分後の PHP セッションの有効期限を確実に管理するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-25 04:59:16796ブラウズ

How to Reliably Manage PHP Session Expiry After 30 Minutes?

30 分後の PHP セッションの有効期限を管理する方法

セッションを一定時間維持し、その後終了する必要性Web開発ではよくあることです。 PHP にはセッション タイムアウトを設定するためのオプションが用意されていますが、常に信頼できる結果が得られるとは限りません。既存の PHP メカニズムの欠点を理解し、信頼できる解決策を探ってみましょう。

PHP の組み込みタイムアウト オプションの信頼性の問題

PHP には、セッションを設定するための 2 つのオプションがありますtimeouts:

  1. session.gc_maxlifetime: PHP がセッション データを「ゴミ」とみなしてクリーニングを開始するまでの秒数を制御します。ただし、ガベージ コレクション プロセスは session.gc_probability と session.gc_divisor によって決定されるランダムな確率に依存するため、このオプションは信頼できません。
  2. session.cookie_lifetime: 送信される Cookie の存続期間を指定します。ブラウザに。ただし、このオプションは Cookie の期間に影響を与えるだけであり、セッション自体は無効になりません。

カスタム セッション タイムアウト メカニズムの実装

信頼性の高いセッションを確立するにはセッションタイムアウトの場合は、独自のソリューションを実装してください。これは、最後のユーザー アクティビティを表すタイム スタンプを維持することで実現できます。

if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) {
    // Last request was more than 30 minutes ago
    session_unset(); // Unset $_SESSION variable
    session_destroy(); // Destroy session data in storage
}
$_SESSION['LAST_ACTIVITY'] = time(); // Update last activity timestamp
  1. 「LAST_ACTIVITY」キーがセッションに存在するかどうかを確認し、最後のアクティビティから 30 分が経過したかどうかを確認します。
  2. セッションが 30 分以上非アクティブな場合は、session_unset() を使用してすべてのセッション変数の設定を解除し、次を使用してセッションを破棄します。 session_destroy().
  3. アクティブな使用中にセッションを維持するために、リクエストごとに「LAST_ACTIVITY」タイムスタンプを定期的に更新します。

リクエストごとにセッション データを更新すると、セッション ファイルの変更日が変更されます、ガベージ コレクターがセッションを途中で削除することはありません。

セキュリティを強化するには、定期的にセッション ハイジャックの試みを軽減するためのセッション 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 and invalidate old one
    $_SESSION['CREATED'] = time(); // Update creation time
}

追加メモ

  1. session.gc_maxlifetime がそれ以上の値に設定されていることを確認してくださいカスタム有効期限ハンドラー期間 (この場合は 1800)例)。
  2. 30 分のアクティビティに基づいてセッションを期限切れにしたい場合は、setcookie(..., time() 60*30) を使用して Cookie の有効期限を設定し、セッション Cookie をアクティブに保ちます。

以上が30 分後の PHP セッションの有効期限を確実に管理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。