Session PHP perdue après une redirection
comment résoudre le problème de perdre une session après une redirection en PHP?
récemment, j'ai rencontré un problème très fréquent de perte de session après redirection. Et après avoir cherché à travers ce site je ne peux toujours pas trouver de solution (bien que ce est venu le plus proche).
mise à Jour
j'ai trouvé la réponse et je pensais la poster ici pour aider quiconque éprouve le même problème.
1 réponses
tout D'abord, effectuer ces vérifications habituelles:
- assurez-vous que
session_start();
est appelé avant que n'importe quelles sessions sont appelées. Donc un pari sûr serait de le mettre au début de votre page, immédiatement après la déclaration d'ouverture<?php
avant toute autre chose. Assurez-vous également qu'il n'y a pas d'espaces/onglets avant l'ouverture de la déclaration<?php
. - après la redirection
header
, terminer le script courant en utilisantexit();
(D'autres ont également suggérésession_write_close();
etsession_regenerate_id(true)
, vous pouvez essayer ceux-ci aussi, mais je voudrais utiliserexit();
) - assurez-vous que les cookies sont activés dans le navigateur que vous utilisez pour faire des tests.
- S'assurer que
register_globals
est désactivé, vous pouvez le vérifier sur le fichierphp.ini
et aussi en utilisantphpinfo()
. Se référer à ce pour savoir comment l'éteindre. - assurez-vous de ne pas supprimer ou vide la séance
- assurez-vous que la clé de votre tableau
$_SESSION
n'est écrasée nulle part - assurez-vous que vous redirigez vers le même domaine. Ainsi, la redirection d'un
www.yourdomain.com
versyourdomain.com
ne fait pas avancer la session. - assurez-vous que votre extension de fichier est
.php
(il arrive!)
maintenant, ce sont les erreurs les plus courantes, mais s'ils n'ont pas fait le tour, le le problème est très probablement lié à votre société d'hébergement. Si tout fonctionne sur localhost
mais pas sur votre serveur distant/testing, alors c'est très probablement le coupable. Vérifiez donc la base de connaissances de votre hébergeur (essayez aussi leurs forums, etc.). Pour les entreprises comme FatCow et iPage, ils exigent que vous spécifiez session_save_path
. Comme ceci:
session_save_path('"your home directory path"/cgi-bin/tmp');
session_start();
(remplacer" votre chemin de répertoire personnel " par votre chemin de répertoire personnel. C'est généralement à l'intérieur de votre panneau de configuration (ou équivalent), mais vous pouvez aussi créer un fichier test.php
dans votre répertoire racine et taper:
<?php echo $_SERVER['SCRIPT_FILENAME']; ?>
test du bit avant'.php ' est le chemin de votre répertoire personnel. Et bien sûr, assurez-vous que le dossier existe réellement dans votre répertoire racine. (Certains programmes ne téléchargent pas de dossiers vides lors de la synchronisation)