Maison > Article > développement back-end > Que faire si la session php ne fonctionne pas
La solution au problème que la session php ne fonctionne pas : Appelez d'abord la fonction "session_save_path()" au début de la page ; puis pointez le répertoire où la session est enregistrée vers un répertoire dédié.
Recommandé : "Tutoriel vidéo PHP"
Raisons de l'échec de la session PHP
Récemment, un problème d'échec de session s'est produit dans le projet de l'entreprise. Après l'exécution du programme, la session a échoué en quelques minutes. Plus tard, je l'ai lu longtemps en ligne et j'ai compris son mécanisme : la session est stockée dans un chemin public sous Lunix, ce qui posera un problème s'il y a plusieurs applications Session dans le programme, elles s'influenceront mutuellement.
Plus tard, j'ai essayé de modifier session.gc_maxlifetime mais j'ai constaté que ce paramètre ne fonctionnait pratiquement pas. Par défaut, les informations de session en PHP sont enregistrées dans le répertoire de fichiers temporaires du système sous forme de fichiers texte. Ce chemin est spécifié par le paramètre de configuration session.save_path. Sous Linux, ce chemin est généralement tmp, et sous Windows, il s'agit généralement de C:WindowsTemp. Lorsqu'il y a plusieurs applications PHP sur le serveur, elles enregistreront leurs fichiers de session dans le même répertoire (car elles utilisent le même paramètre session.save_path). De même, ces applications PHP démarreront également GC avec une certaine probabilité et analyseront tous les fichiers de session.
Le problème est que lorsque le GC fonctionne, il ne fait pas la distinction entre les sessions sur les différents sites. Par exemple, le gc_maxlifetime du site A est défini sur 2 heures et le gc_maxlifetime du site B est défini sur 24 minutes par défaut. Lorsque le GC du site B démarre, il analysera le répertoire public des fichiers temporaires et supprimera tous les fichiers de session datant de plus de 24 minutes, qu'ils proviennent du site A ou B. De cette façon, le paramètre gc_maxlifetime du site A est inutile.
Le fonctionnement spécifique est donc que chaque projet a son propre chemin de session. Il est très simple de trouver le problème et de le résoudre. Appelez la fonction session_save_path() en début de page, qui peut modifier le paramètre session.save_path et pointer le répertoire où la session est enregistrée vers un répertoire dédié, tel que tmpmyapp. De cette façon, le paramètre gc_maxlifetime fonctionne normalement.
Code spécifique :
session_start(); ini_set('session.save_path','/tmp/'); //6个钟头 ini_set('session.gc_maxlifetime',21600); //保存一天 $lifeTime = 24 * 3600; setcookie(session_name(), session_id(), time() + $lifeTime, "/");
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!