現在の位置: ホーム> 最新記事一覧> SessionIdinterfaceを使用してセッション要求の数を制限する方法は何ですか? PHP実践セットアップガイド

SessionIdinterfaceを使用してセッション要求の数を制限する方法は何ですか? PHP実践セットアップガイド

M66 2025-06-22

Web開発では、ユーザーリクエストの数を制限することは、システムセキュリティとリソース管理を確保するための重要な測定値の1つです。特に、悪意のある攻撃を防止する必要があるいくつかのシナリオ(ブルートフォースの亀裂、クローラー攻撃など)またはAPIリクエストの頻度を制御する必要があるため、セッション要求の数を制限することは特に重要です。この記事では、PHPでsessionIdinterfaceを使用してセッションリクエストの数を制限し、簡単な実装方法を提供する方法を紹介します。

sessionidinterfaceとは何ですか?

sessionIdinterfaceは、PHP 7.1+バージョンによって導入されたインターフェイスであり、セッションのためにより柔軟な管理方法を提供することを目指しています。これにより、開発者は独自のセッションIDの生成とストレージメカニズムを定義できます。このインターフェイスを実装することにより、開発者はセッションIDの生成方法と処理方法をカスタマイズできます。これにより、セキュリティ制御により多くの自由が提供されます。

セッション要求の数を制限するのはなぜですか?

セッションリクエストの数を制限することは、通常、次の状況を防ぐことです。

  1. ブルートフォースのクラッキング:悪意のあるユーザーがパスワードを頻繁に試していることにより、アカウントをクラックできないようにします。

  2. Crawler Attack :頻繁なリクエストを通じて、自動化ツールがサーバーリソースを消費するのを防ぎます。

  3. APIの保護:インターフェイスの乱用やDDOS攻撃を避けるために、頻繁にAPIリクエストを制限します。

PHPでは、セッションを組み合わせることで、セッションごとのリクエスト数を簡単に制御できます。カウンターを設定し、要件に応じて制限することにより、各セッションのリクエストの数を追跡できます。

sessionidinterfaceを使用してリクエストの数を制限する方法は?

これを達成するには、セッション管理がセッションIDの生成方法をカスタマイズし、同時にセッションを使用してユーザー要求カウントを保存できるようにする必要があります。以下に、特定の実装手順を紹介します。

ステップ1:sessionIdinterfaceを実装します

まず、 CessionIdinterfaceを実装するカスタムクラスを作成し、このクラスを通じてセッションIDが生成および保存される方法を制御します。 PHPのデフォルトセッションIDは直接使用しませんが、ニーズに応じて生成します。

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-keyword">namespace</span></span><span> </span><span><span class="hljs-title class_">App</span></span><span>\</span><span><span class="hljs-title class_">Session</span></span><span>;

</span><span><span class="hljs-keyword">use</span></span><span> </span><span><span class="hljs-title">SessionHandlerInterface</span></span><span>;
</span><span><span class="hljs-keyword">use</span></span><span> </span><span><span class="hljs-title">SessionIdInterface</span></span><span>;

</span><span><span class="hljs-class"><span class="hljs-keyword">class</span></span></span><span> </span><span><span class="hljs-title">CustomSessionId</span></span><span> </span><span><span class="hljs-keyword">implements</span></span><span> </span><span><span class="hljs-title">SessionIdInterface</span></span><span>
{
    </span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">generateId</span></span><span>(</span><span><span class="hljs-params"></span></span><span>)
    {
        </span><span><span class="hljs-comment">// カスタムを生成します Session ID</span></span><span>
        </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">uniqid</span></span><span>(</span><span><span class="hljs-string">'session_'</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>);
    }

    </span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">validateId</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$id</span></span></span><span>)
    {
        </span><span><span class="hljs-comment">// 確認する Session ID 効果</span></span><span>
        </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">preg_match</span></span><span>(</span><span><span class="hljs-string">'/^session_\w+$/'</span></span><span>, </span><span><span class="hljs-variable">$id</span></span><span>);
    }
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

上記のコードでは、 GenerateIDメソッドを使用して新しいセッションIDを生成し、 ValidateIDを使用して、指定されたIDが予想される形式を満たしていることを確認します。このクラスを通じて、セッションIDの生成と検証を制御して、各セッションが一意であることを確認できます。

ステップ2:セッションをオンにし、リクエストカウンターを設定します

次に、PHPセッションを開き、 $ _Sessionアレイを使用してユーザーの要求カウントを保存します。

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-title function_ invoke__">session_start</span></span><span>();

</span><span><span class="hljs-comment">// 要求するたびにカウンターを増やします</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-keyword">isset</span></span><span>(</span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'request_count'</span></span><span>])) {
    </span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'request_count'</span></span><span>] = </span><span><span class="hljs-number">0</span></span><span>;
}

</span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'request_count'</span></span><span>]++;

</span><span><span class="hljs-comment">// 制限を設定します</span></span><span>
</span><span><span class="hljs-variable">$maxRequests</span></span><span> = </span><span><span class="hljs-number">5</span></span><span>;

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'request_count'</span></span><span>] &gt; </span><span><span class="hljs-variable">$maxRequests</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"リクエストの数が最大制限に達しました,後でもう一度やり直してください!"</span></span><span>;
    </span><span><span class="hljs-keyword">exit</span></span><span>;
}

</span><span><span class="hljs-comment">// 通常のビジネスロジックを実行し続けます</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"リクエスト数:"</span></span><span> . </span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'request_count'</span></span><span>];
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

このコードでは、最初にrequest_countが存在するかどうか、そうでない場合は0に初期化します。各リクエストで、カウンターは1によって増加します。リクエストの数が設定された最大値を超えると、システムはプロンプトを出力して実行を終了します。

ステップ3:セッションカウンターを掃除します

長期使用中にユーザーの要求が制限なく増加することを避けるために、セッションが期限切れになったとき、または特定の条件が満たされたときにカウンターをクリアできます。セッションの有効期限を設定することにより、一定期間後にセッションカウントを自動的にリセットできます。

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// 設定 Session 有効期限はです 10 分</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ini_set</span></span><span>(</span><span><span class="hljs-string">'session.gc_maxlifetime'</span></span><span>, </span><span><span class="hljs-number">600</span></span><span>);  </span><span><span class="hljs-comment">// 600 2番</span></span><span>
</span><span><span class="hljs-title function_ invoke__">session_start</span></span><span>();

</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-keyword">isset</span></span><span>(</span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'last_request_time'</span></span><span>])) {
    </span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'last_request_time'</span></span><span>] = </span><span><span class="hljs-title function_ invoke__">time</span></span><span>();
}

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">time</span></span><span>() - </span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'last_request_time'</span></span><span>] &gt; </span><span><span class="hljs-number">600</span></span><span>) {
    </span><span><span class="hljs-title function_ invoke__">session_destroy</span></span><span>();  </span><span><span class="hljs-comment">// セッションは期限切れです,セッションを破壊します</span></span><span>
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"セッションは期限切れです,もう一度ログインしてください"</span></span><span>;
    </span><span><span class="hljs-keyword">exit</span></span><span>;
}

</span><span><span class="hljs-variable">$_SESSION</span></span><span>[</span><span><span class="hljs-string">'last_request_time'</span></span><span>] = </span><span><span class="hljs-title function_ invoke__">time</span></span><span>();
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

このコードはセッションの有効期限制御を実装します。セッションが10分を超え、リクエストが行われないと、セッションが自動的に破壊され、ユーザーのセッションが失効します。

要約します

上記の方法を使用して、 SessionIdinterfaceでPHPのセッションIDをカスタマイズし、セッションストレージを使用してリクエストの数を制限できます。単純なコードの実装を通じて、ユーザーエクスペリエンスを確保しながら、悪意のあるリクエストを効果的に防止し、システムのセキュリティを改善できます。

この記事の実用的なガイドがあなたに役立ち、開発プロセス中に会話をよりよく管理し、リクエストを制限するのに役立つことを願っています。