PHP: session n'est pas l'enregistrement avant de l'en-tête de redirection
J'ai lu attentivement le manuel php pour ce problème et il semble tout à fait une question commune mais je n'ai pas encore trouver une solution. Je suis sauvegarder les sessions dans une base de données.
Mon code est comme suit:
//session
$_SESSION['userID'] = $user->id;
header('Location: /subdirectory/index.php');
Puis, au sommet de index.php après la session_start()
, j'ai var_dumped $_SESSION mondiale et le nom d'utilisateur n'est pas là. Comme je l'ai dit ive a regardé à travers le manuel PHP (http://php.net/manual/en/function.session-write-close.php
) et ni session_write_close
ou session_regenerate_id(true)
a fonctionné pour moi.
Quelqu'un sait-elle une solution?
Edit: j'ai session_start() en haut de mon fichier. Quand je var_dump la session mondial avant le header de redirection, je vois le nom d'utilisateur, mais pas dans l'autre fichier, qui est dans un sous-répertoire de ce script
session_starting()
où vous faire la redirection?et êtes-vous sûr que $user->id est réglé?
Salut, merci de voir le commentaire que j'ai laissé pour @ahmet2106 post
qu'est-ce que register_globals état?
OriginalL'auteur phpNutt | 2010-06-03
Vous devez vous connecter pour publier un commentaire.
Je sais que c'est un vieux toppic mais j'ai trouvé la solution (pour moi).
J'ai mis une sortie après l'en-tête.
Cela fonctionne pour moi
Cela a fonctionné pour moi aussi.
C'est en travaillant uniquement pour le même répertoire. Comment faire ce travail pour le sous-répertoire? F. e.: à partir de http:/domain.com pour http:/domain.com/subdir/ ?
OriginalL'auteur Tim Van Samang
@Matt (pas en mesure de commenter pour l'instant...): Si:
a) s'Il ressort de la séance, avant de rediriger
b) les autres touches fonctionnent
80% du temps, le problème est register_globals, et l'utilisation d'un même nom de variable $userID quelque part (l'autre est que de 19% seulement d'écraser dans des endroits on n'en attend pas, 1% est impossible d'écrire/de verrouillage de session avant de rediriger l'utilisateur et des données périmées, dans ce cas, vous pourrait essayer session_write_close() avant la redirection). Il va sans dire register_globals doit être éteint 😛
OriginalL'auteur Wrikken
Vous devriez commencer à la session avant d'utiliser le tableau de session.
Code PHP,
session_start();
$_SESSION['userID'] = $utilisateur->id;
header('location: /subdirectory/index.php');
OriginalL'auteur Yash Bele
Avez-vous un session_start(); sur le dessus?
Pas encore testé mais je ne peux pas vous faire quelque chose comme ceci:
Je n'ai jamais eu ce Problème avant, intéressant
drôle, mais c'est vraiment intéressant parce qu'il doit être réglé de la Session, peut-être que tout autre type de code est la suppression de votre session, sont u assurez-vous nulle part ailleurs est un session_destroy(); ?
Étrange, j'ai changé de $_SESSION['userID'] $_SESSION['uid'] et cela a fonctionné comme prévu. Je ne sais pas pourquoi les deux lettres majuscules faire une différence. Je l'ai essayé avec userId aswell et qui était très bien aussi. Toutes les idées pour lesquelles il ne serait pas accepter userID? avec deux capitales, im perplexe
OriginalL'auteur ahmet2106
nom d'utilisateur n'a pas de mot d'état.
Seule raison pour moi, c'est $_SESSION['userID'] est en train d'être remplacés ou supprimés quelque part.
Assurez-vous d'utiliser session->start() dans tous les fichiers que vous souhaitez ajouter/accéder à la session.
Une chose importante ( qui peut ne pas être applicable dans votre cas ) est, si la session est en cours de traitement à l'aide de cookie, cookie peut être fait pour être accessible que sous certaines répertoire et sous-répertoires.
Dans votre cas, de toute façon, le sous-répertoire aurez accès à la session.
OriginalL'auteur Lionheart
Assurez-vous que les pages sont de la même version de php
(php5, php4 ont parfois d'autres session chemins)
OriginalL'auteur Harry
Je n'ai pas entendu parler de cette question, mais je n'ai pas utilisé les sessions.
Avec les sessions, vous DEVEZ faire quelques choses et avoir un peu de configuration de l'installation:
Une autre question pourrait être le $user->id est de retourner une référence à un objet qui n'existe pas sur la page suivante. Probablement pas, mais assurez-vous.
Si j'ai vu ton code j'ai pu t'aider beaucoup plus. Mais lors du débogage de vérifier la clé de session avec session_id() et assurez-vous que c'est la même chose. Si vous pourriez essayer cela, alors dites-moi, je pouvais continuer d'aider.
Moi aussi, je voudrais savoir comment cela se termine pour quand je serai de retour en séances.
OriginalL'auteur Michael Ozeryansky
J'ai eu le même problème récemment. Je suis d'écriture personnalisé MVC Site web pour l'école et, comme tout le monde le dit, start_session() doit être écrit dans les premières lignes de code.
Mon problème était L'EMPLACEMENT de "session_start()". Elle doit être la première des lignes globale de votre contrôleur, pas les premières lignes de la vue. $_SESSION n'était pas accessible dans du contrôleur de fichiers, car il a été seulement mis en place lorsque le serveur de rendre la vue.
Alors, je suis en utilisant session_write_close() après le header('location: xxx.php') appel de garder les variables de session pour la prochaine requête.
ex:
globalController.php :
logonController.php:
Espère que cela a résolu votre problème.
OriginalL'auteur R4Z3X
C'est ennuyeux comme l'enfer, mais j'ai finalement trouvé une solution.
config.php j'ai eu:
inclure "session.php';
En haut de session.php, j'ai eu:
session_start();
En déplaçant la fonction session_start() en haut de la config.php fichier, alto...
Problème résolu!
OriginalL'auteur user2557895