Position actuelle: Accueil> Derniers articles> Quelle est la façon de limiter le nombre de demandes de session à l'aide de sessionIdInterface? Guide de configuration pratique PHP

Quelle est la façon de limiter le nombre de demandes de session à l'aide de sessionIdInterface? Guide de configuration pratique PHP

M66 2025-06-22

Dans le développement Web, la limitation du nombre de demandes d'utilisateurs est l'une des mesures clés pour garantir la sécurité du système et la gestion des ressources. Surtout dans certains scénarios où les attaques malveillantes doivent être empêchées (telles que la fissuration par force brute, les attaques de robottes, etc.) ou la fréquence des demandes d'API doit être contrôlée, la limitation du nombre de demandes de session est particulièrement importante. Cet article vous indiquera comment utiliser sessionIdInterface dans PHP pour limiter le nombre de demandes de session et fournir une méthode de mise en œuvre simple.

Qu'est-ce que SessionIdInterface?

SessionIdInterface est une interface introduite par la version PHP 7.1+, visant à fournir des méthodes de gestion plus flexibles pour la session. Il permet aux développeurs de définir leurs propres mécanismes de génération et de stockage d'identité de session. En implémentant cette interface, les développeurs peuvent personnaliser la façon dont les ID de session sont générés et traités, ce qui offre plus de liberté pour le contrôle de la sécurité.

Pourquoi limiter le nombre de demandes de session?

Limiter le nombre de demandes de session consiste généralement à empêcher les situations suivantes:

  1. Crackage par force brute : empêchez les utilisateurs malveillants de craquer leurs comptes en essayant fréquemment des mots de passe.

  2. Attaque de Crawler : empêche les outils d'automatisation de consommer des ressources de serveur via des demandes fréquentes.

  3. Protéger l'API : restreindre les demandes d'API fréquentes pour éviter les abus d'interface ou les attaques DDOS.

En PHP, la combinaison de la session peut facilement contrôler le nombre de demandes par session. Nous pouvons suivre le nombre de demandes pour chaque session en définissant un compteur et en le limitant en fonction des exigences.

Comment limiter le nombre de demandes à l'aide de sessionIdInterface?

Pour y parvenir, nous devons d'abord nous assurer que la gestion de la session peut personnaliser la façon dont les ID de session sont générés et en même temps utiliser la session pour stocker le nombre de demandes d'utilisateurs. Ci-dessous, nous présenterons les étapes de mise en œuvre spécifiques.

Étape 1: implémentation de sessionIdInterface

Tout d'abord, créez une classe personnalisée pour implémenter SessionIdInterface et contrôler la façon dont l'ID de session est généré et stocké via cette classe. Nous n'utilisons pas directement l'ID de session par défaut de PHP, mais le générons en fonction de nos besoins.

 <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">// Générer une coutume 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">// vérifier Session ID Efficacité</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>

Dans le code ci-dessus, la méthode GenerateID est utilisée pour générer un nouvel ID de session, et ValidateId est utilisé pour vérifier que l'ID donné répond au format attendu. Grâce à cette classe, nous pouvons contrôler la génération et la vérification des ID de session pour nous assurer que chaque session est unique.

Étape 2: Allumez la session et définissez le compteur de demande

Ensuite, ouvrez la session PHP et utilisez le tableau $ _Session pour stocker le nombre de demandes de l'utilisateur.

 <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">// Augmentez le comptoir à chaque fois que vous demandez</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">// Fixer des limites</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">"Le nombre de demandes a atteint la limite maximale,Veuillez réessayer plus tard!"</span></span><span>;
    </span><span><span class="hljs-keyword">exit</span></span><span>;
}

</span><span><span class="hljs-comment">// Continuez à exécuter une logique commerciale normale</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Nombre de demandes:"</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>

Dans ce code, nous vérifions d'abord si request_count existe, et sinon, initialisez à 0. À chaque demande, le compteur est incrémenté de 1. Lorsque le nombre de demandes dépasse la valeur maximale définie, le système sortira une invite et terminera l'exécution.

Étape 3: Nettoyez le compteur de session

Afin d'éviter que les demandes de l'utilisateur augmentent sans limite pendant l'utilisation à long terme, nous pouvons effacer le compteur lorsque la session expire ou lorsqu'une certaine condition est remplie. En définissant le temps d'expiration de la session, le nombre de session peut être réinitialisé automatiquement après une période de temps.

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// installation Session Le temps d&#39;expiration est 10 minute</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 Deuxième</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">// La session expire,Détruire la session</span></span><span>
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"La session expire,Veuillez vous connecter à nouveau"</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>

Ce code implémente le contrôle d'expiration de la session. Lorsque la session dépasse 10 minutes et qu'aucune demande n'est faite, la session est automatiquement détruite et la session de l'utilisateur a expiré.

Résumer

Grâce à la méthode ci-dessus, nous pouvons personnaliser l'ID de session dans PHP avec SessionIdInterface et utiliser le stockage de session pour limiter le nombre de demandes. Grâce à une implémentation de code simple, nous pouvons prévenir efficacement les demandes malveillantes et améliorer la sécurité du système tout en garantissant l'expérience utilisateur.

J'espère que le guide pratique de cet article vous sera utile et vous aidera à mieux gérer les conversations et à limiter les demandes pendant le processus de développement.