J'ai lu le manuel PHP pour ce problème et il semble un problème assez courant, mais je n'ai pas encore trouvé de solution. Je sauve des sessions dans une base de données.
Mon code est comme suit: alors au sommet de l'index.php après le Edit: j'ai session_start () en haut de mon fichier. Lorsque je Var_Dumpez la session globale avant la redirection de l'en-tête, je vois l'ID utilisateur là-bas, mais pas dans l'autre fichier, qui est dans un sous-répertoire de ce script P> P> session_start () code>, j'ai var_dumped the $ _session global et l'userid n'est pas là-bas. Comme je l'ai dit ive examiné via le manuel PHP (
http://php.net/manual/fr/function.session-write-close.php code>) et ni
session_write_close code> ou
session_regenerèrent_id (true) code> a travaillé pour moi.
Est-ce que quelqu'un connaît une solution? P>
10 Réponses :
Avez-vous eu une session_start (); sur le dessus?
non testé mais que vous ne pouvez pas faire quelque chose comme ceci: p> Je n'ai jamais ce problème avant, intéressant P> P>
Oui. Quand i Var_Dump, la session globale avant l'en-tête redirige, c'est là-bas, il ne s'agit que lorsque je vais dans un nouveau fichier dans un sous-dossier du script d'origine.
@Matt Drôle, mais c'est vraiment intéressant, car il devrait y avoir défini la session, peut-être que tout autre code est en train de supprimer votre session, êtes-vous sûr de nulle part ailleurs est un session_destroy (); ?
Étrange, j'ai changé $ _Session ['userid'] à $ _Session ['UID'] et cela a fonctionné comme prévu. Je ne sais pas pourquoi les deux lettres majuscules font la différence. Je l'ai essayé avec Userid Aswell et c'était bien aussi. Des idées sur la raison pour laquelle cela n'accepterait pas d'IDERID? avec deux capitales, im déroulé
userid n'a pas d'état de mot clé. P>
Une seule raison pour moi, c'est $ _Session ['userid'] est écrasé ou supprimé quelque part. P>
Assurez-vous d'utiliser Session-> Démarrer () dans tous les fichiers que vous souhaitez ajouter / accéder à la session. P>
Une chose importante (qui peut ne pas être applicable dans votre cas) est, si la session est manipulée à l'aide de Cookie, il est possible de faire des cookies pour être accessibles uniquement sous certains répertoires et sous-répertoires sous cela. Dans votre cas, de toute façon, le sous-répertoire aura accès à la session. P>
@matt (non capable de commenter encore ...): Si:
a) il apparaît dans la session avant de rediriger
b) D'autres clés fonctionnent p>
80% du temps que le problème est enregistré_globals et l'utilisation d'une variable nommée également $ Userid quelque part (les autres 19% consistent à écraser dans des endroits où on ne s'attend pas, 1% est incapable d'écrire / verrouiller la session avant de rediriger et des données étatiques, auquel cas vous pourrait em> essayer session_write_close () avant la redirection). Il va sans dire register_globals devrait être éteint: p p>
3 années plus tard. session_write_close était le meilleur commentaire pour aujourd'hui!
Assurez-vous que les deux pages sont la même version PHP (PHP5, PHP4 a parfois différents chemins de session) p>
Je n'ai pas entendu parler de cette question, mais je n'ai pas utilisé des sessions tout cela beaucoup. P>
Avec des sessions, vous devez faire quelques choses et avoir quelques paramètres de configuration: P>
Un autre problème pourrait être l'utilisateur $ User-> ID renvoie une référence à un objet qui n'existe pas à la page suivante. Probablement pas, mais assurez-vous. P>
Si je voyais votre code, je pourrais vous aider beaucoup plus. Mais lorsque le débogage vérifie la clé de session avec session_id () et assurez-vous que c'est la même chose. Si vous pouviez essayer cela, dis-moi, je pouvais continuer à aider. P>
Moi aussi, je voudrais savoir comment cela se termine lorsque je reviens dans des sessions. P>
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.
$_SESSION['session'] = 'this is a session'; header('location: apage.php'); exit;
Cela ne fonctionne que pour le même répertoire. Comment faire ce travail pour le sous-répertoire? F.e.: De http: /domain.com à http: /domain.com/subdir/?
J'ai eu le même problème récemment. J'écris un site Web MVC personnalisé pour l'école et, comme tout le monde le dit, Start_Session () doit être écrit dans les toutes premières lignes de code.
Mon problème était l'emplacement de "session_start ()". Ce doivent être les premières lignes de votre contrôleur global, pas les premières lignes de la vue. $ _Session n'était pas accessible dans les fichiers du contrôleur car il n'a été initié que lorsque le serveur rend la vue. P>
alors, j'utilise session_write_close () après l'en-tête ('"Emplacement: xxx.php') Gardez les variables de la session pour la prochaine demande. P>
ex: p>
globalcontroller.php: p> logoncontroller.php: p > ...
//Users is validated and redirected.
$_SESSION['client'] = $client;
header('location: index.php');
session_write_close();
C'était gênant comme l'enfer mais j'ai finalement compris une solution. P>
config.php j'ai eu: inclure 'session.php'; p>
en haut de session.php, j'avais: session_start (); p>
en déplaçant session_start () en haut du fichier config.php, alto ... p>
problème résolu! p>
C'est très bien que vous avez résolu le problème. Je vous conseillerai de vous informer de ne plus être plus propres dans votre solution afin d'aider les autres lecteurs aussi.
Vous devez démarrer la session avant d'utiliser le tableau de session. P>
session_start ();
$ _Session ['userid'] = $ utilisateur-> id;
Hauteur ('Emplacement: /SubDirectory/index.php'); p>
Une autre option que de tuer votre script avec force avec Cela ne devrait cependant pas arriver si votre script se termine correctement. P>
comme la documentation sur mettre fin à la session en cours et à stocker les données de session. P>
Les données de session sont généralement stockées après la fin de votre script sans
la nécessité d'appeler session_write_close (), mais comme les données de session sont verrouillées
Pour éviter que l'on écrit simultanément, un seul script peut fonctionner lors d'une session
à tout moment. Lorsque vous utilisez des cadres de cadres avec des sessions, vous allez
Découvrez les cadres en chargement d'un par un en raison de ce verrouillage. Vous pouvez
réduire le temps nécessaire pour charger tous les cadres en mettant fin à la session comme
dès que toutes les modifications apportées aux variables de session sont terminées. P>
blockQuote>
Dans mon cas, cela ne s'est produit que pendant le débogage avec EXIT code> est d'utiliser
session_write_close code> pour forcer les modifications à écrire dans le magasin de session. p>
session_write_close code > États:
p>
xdebug code>, lorsque j'ai déclenché le même script plusieurs fois et donc plusieurs processus ont essayé de manipuler la même session. En quelque sorte, la session ne pourrait alors plus être déverrouillée. P>
Êtes-vous
session_starting () code> où vous faites la redirection?
Et êtes-vous sûr que $ utilisateur-> id est défini?
Bonjour, veuillez consulter le commentaire que j'ai laissé pour @ ahmet2106's Post
Qu'est-ce que registre_globals State?