Maison développement back-end tutoriel php Explication détaillée de la collecte de données d'analyse invalides de session php

Explication détaillée de la collecte de données d'analyse invalides de session php

Feb 27, 2017 am 09:16 AM

Analyse invalide de la session PHP

Au cours du processus de développement PHP, certains amis peuvent souvent rencontrer le problème que les fichiers générés par la session ne peuvent pas être automatiquement effacés. vraiment impossible à effacer, mais il y a un problème de probabilité. Tant que votre site a un trafic suffisamment important, ces fichiers peuvent être automatiquement effacés. Si le nombre de visites est relativement faible et que les fichiers ne sont pas agréables à l'œil, vous pouvez réaliser l'effacement automatique des fichiers de session en configurant php.ini. La configuration spécifique est la suivante :

Rechercher
.

session.gc_probability = 1
session.gc_pisor = 1000
Copier après la connexion

Les deux paramètres ci-dessus sont en fait cette probabilité, qui est de 1/1000 par défaut
Changez session.gc_pisor = 1000 en session.gc_pisor = 100
Si vous souhaitez obtenir un réel complet -time , alors vous pouvez changer ce paramètre à 1, pour que la probabilité soit de 100%
Voyons comment fonctionne la session
Présentation : Chaque requête PHP a une probabilité de 1/100 (par défaut valeur) déclenche le "recyclage de session". Si un "recyclage de session" se produit, les fichiers /tmp/sess_* seront vérifiés. Si le temps de dernière modification dépasse 1440 secondes (la valeur de gc_maxlifetime), ils seront supprimés, ce qui signifie que ces sessions ont expiré.
1. Comment existe-t-il une session côté serveur (généralement Apache avec module PHP) ?
Par défaut, php enregistrera la session dans le répertoire /tmp, et le nom du fichier sera comme ceci : sess_01aab840166fd1dc253e3b4a3f0b8381. Chaque fichier correspond à une session.

more /tmp/sess_01aab840166fd1dc253e3b4a3f0b8381
username|s:9:”jiangfeng”;admin|s:1:”0〃;
Copier après la connexion


#Nom de la variable|Type : longueur : valeur

Supprimer le fichier de session ici signifie que la session correspondante n'est pas valide.

2. Comment la session existe-t-elle côté client (généralement le navigateur) ?

La session est côté navigateur, il vous suffit de sauvegarder l'ID de session (l'ID unique généré par le côté serveur). Il existe deux manières de l'enregistrer : dans les cookies et dans les URL. Si l'ID de session est enregistré dans le cookie, vous pouvez voir qu'il existe une variable PHPSESID dans le cookie du navigateur. S'il est passé par URL, vous pouvez voir une URL sous la forme :

index.php?PHPSESID=01aab840166fd1dc253e3b4a3f0b8381. (Côté serveur, utilisez session.use_cookies pour contrôler quelle méthode est utilisée)

3. Côté serveur, comment PHP détermine-t-il si le fichier de session a expiré ?

Si la "dernière heure de modification" à "maintenant" dépasse gc_maxlifetime (la valeur par défaut est 1440) secondes, ce fichier de session est considéré comme expiré lors du recyclage de la prochaine session, si ce fichier l'a encore. n'a pas été modifié, le fichier de session sera supprimé (la session expirera).

Pour faire simple, si je me connecte à un site internet et qu'il n'y a aucune opération dans un délai de 1440 secondes (valeur par défaut), alors la session correspondante est considérée comme expirée.

Ainsi, modifier la variable gc_maxlifetime dans le fichier php.ini peut prolonger le délai d'expiration de la session : (par exemple, on modifie le délai d'expiration à 86400 secondes)

session.gc_maxlifetime = 86400
Copier après la connexion

Ensuite, redémarrez simplement votre service Web (généralement Apache).

Remarque : En php5, l'expiration de la session utilise un mécanisme de recyclage. Le temps fixé ici est de 86400 secondes. Si la session n'a pas été modifiée dans un délai de 86400 secondes, elle ne sera supprimée qu'au prochain "recyclage".

4. Quand a lieu la séance de « recyclage » ?

Par défaut, pour chaque requête php, il y aura une probabilité de recyclage de 1/100, cela peut donc être simplement compris comme "un recyclage a lieu pour 100 requêtes php". Cette probabilité est contrôlée par les paramètres suivants

#概率是gc_probability/gc_pisor
session.gc_probability = 1
session.gc_pisor = 100
Copier après la connexion

Remarque 1 : Supposons que dans ce cas gc_maxlifetime=120, si un fichier de session a été modifié pour la dernière fois il y a 120 secondes, alors la prochaine fois Cette session est toujours valable jusqu'à ce que le recyclage (probabilité 1/100) ait lieu.

Remarque 2 : Si votre session utilise session.save_path pour enregistrer la session ailleurs, le mécanisme de recyclage de session peut ne pas traiter automatiquement les fichiers de session expirés. A ce moment, vous devez supprimer les sessions expirées manuellement (ou crontab) régulièrement :

cd /path/to/sessions; find -cmin +24 | xargs rm
Copier après la connexion

Certaines situations particulières

car. du mécanisme de recyclage L'"heure de dernière modification" du fichier sera vérifiée, donc si une session est active, mais que le contenu de la session n'a pas changé, alors le fichier de session correspondant n'a pas changé, et le mécanisme de recyclage en tiendra compte être une session qui n’a pas été active depuis longtemps et supprimez-la. C'est quelque chose que nous ne voulons pas voir. Nous pouvons résoudre ce problème en ajoutant le code simple suivant :

<?php 
if(!isset($_SESSION[&#39;last_access&#39;])||(time()-$_SESSION[&#39;last_access&#39;])>60)
  $_SESSION[&#39;last_access&#39;] = time(); 
?>
Copier après la connexion

Le code tentera de modifier la session toutes les 60 secondes.

Résumé : Si vous souhaitez modifier le délai d'expiration de la session, modifiez simplement la variable gc_maxlifetime. La session PHP5 utilise un mécanisme de recyclage passif (garbage collection). Les fichiers de session expirés ne disparaîtront pas d'eux-mêmes, mais les sessions expirées seront traitées en déclenchant le « recyclage ».

Examinons en détail quelques autres problèmes liés à la définition de l'heure d'expiration

Paramètres du délai d'expiration de la session

Définir les paramètres du délai d'expiration, principalement Il suffit de définir le paramètres de session.gc_maxlifetime Pour un réglage plus sûr, définissez simplement les deux paramètres suivants

.
ini_set(&#39;session.cookie_lifetime&#39;, 0); // 可用 print_r(session_get_cookie_params()); 观察
ini_set(&#39;session.gc_maxlifetime&#39;, 3600); // 可用 echo ini_get("session.gc_maxlifetime"); 观察
Copier après la connexion

session_cookie_lifetime 设为 0 的话, 代表等到 browser 才把此 cookie 清掉.(session 和 browser cookie 是有相关的)

如果懒得想这些, 直接用下面的 function 就可以了
Session 过期时间程式

<?php
function start_session($expire = 0)
{
  if ($expire == 0) {
    $expire = ini_get(&#39;session.gc_maxlifetime&#39;);
  } else {
    ini_set(&#39;session.gc_maxlifetime&#39;, $expire);
  }
  if (empty($_COOKIE[&#39;PHPSESSID&#39;])) {
    session_set_cookie_params($expire);
    session_start();
  } else {
    session_start();
    setcookie(&#39;PHPSESSID&#39;, session_id(), time() + $expire);
  }
}
?>
Copier après la connexion

使用方式

于程式最上方加入: start_session(600); // 代表 600 秒后会过期 (取代原本 session_start())
如果要再延长过期时间, 只要再做修改即可.
但是有个问题要注意, 就是 PHP 的 session 预设是存成 file, 所以 /tmp 可能会因这样设定而爆掉(档案太多), 通常解法是把 session 存进 DB/memcache 中.

 以上就是php Session无效分析资料整理的详解的内容,更多相关内容请关注PHP中文网(www.php.cn)!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

CakePHP travaillant avec la base de données CakePHP travaillant avec la base de données Sep 10, 2024 pm 05:25 PM

Travailler avec la base de données dans CakePHP est très simple. Nous comprendrons les opérations CRUD (Créer, Lire, Mettre à jour, Supprimer) dans ce chapitre.

Date et heure de CakePHP Date et heure de CakePHP Sep 10, 2024 pm 05:27 PM

Pour travailler avec la date et l'heure dans cakephp4, nous allons utiliser la classe FrozenTime disponible.

Téléchargement de fichiers CakePHP Téléchargement de fichiers CakePHP Sep 10, 2024 pm 05:27 PM

Pour travailler sur le téléchargement de fichiers, nous allons utiliser l'assistant de formulaire. Voici un exemple de téléchargement de fichiers.

Discuter de CakePHP Discuter de CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP est un framework open source pour PHP. Il vise à faciliter grandement le développement, le déploiement et la maintenance d'applications. CakePHP est basé sur une architecture de type MVC à la fois puissante et facile à appréhender. Modèles, vues et contrôleurs gu

CakePHP créant des validateurs CakePHP créant des validateurs Sep 10, 2024 pm 05:26 PM

Le validateur peut être créé en ajoutant les deux lignes suivantes dans le contrôleur.

Journalisation CakePHP Journalisation CakePHP Sep 10, 2024 pm 05:26 PM

Se connecter à CakePHP est une tâche très simple. Il vous suffit d'utiliser une seule fonction. Vous pouvez enregistrer les erreurs, les exceptions, les activités des utilisateurs, les actions entreprises par les utilisateurs, pour tout processus en arrière-plan comme cronjob. La journalisation des données dans CakePHP est facile. La fonction log() est fournie

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

See all articles