Aller au contenu

"perte" du fichier de vars de session


Sujets conseillés

Posté

(re)Bonjour à toutes et à tous,

Ti pb de perte de session, ou plutôt de création d'une nouvelle session non désirée !

quand je passe d'une page à une autre par un appel via un :

if(...) include_once('ma_page2.php');

quand "j'atterri" sur ma_page2.php

et suite à un :

session_start();

php me crée un nouveau fichier de vars de session au lieu de réutiliser l'ancien créé auparavant, est-ce que cela vient de l'appel par include_once(...) ou est-ce que le problème est ailleurs ?

merci pour vos idées !

Nils.

Posté

Ne fais ton session_start() qu'une et une seule fois au début du script principal. Le fait de refaire appel à la fonction va recréer un "contexte" de gestion de session qui va annuler le précédent.

Le fait de faire un include ne te place pas du tout dans la même situation qu'un header("location:) ou d'un changement de page : tu es tjs dans le script appelant.

Donc ne fais pas de session_start() dans ma_page2.php

Posté

Bonjour,

on utilise soit session_register, soit le tableau global $_SESSION, mais attention à ne pas utiliser les 2 en même temps, il y aurait des pbs de compatibilité. ;)

Nico.

Posté

re bonjour tous,

bon, je suis enfin retourné à mon script ! ma machine de développement remarche, ouf ! (merci Dan)

Mais je n'ai pas encore tout bien saisi, et je crois surtout d'une façon globale :

comment navigue-t'on entre les pages d'un site PHP ?

Que faut-il préférer, quelle stratégie faut-il prendre, toujours avec l'idée de garder le contenu des variable de session "le plus longtemps possible" !

Je veux dire par là qu'il me semble que je peux utiliser des :

=> include_once() mais aussi des :

=> header() que je n'ai encore jamais eu l'occasion d'utiliser, je ne sais donc pas encore à quoi ça sert (ni comment ça marche) mais aussi des :

=> <href...> et aussi des :

=> <form action=...>

et peut être même que j'en oublie !!!

Alors dans tout ça, je commence à y perdre mon "php", et je perds toujours le contenu de mes variables de sessions.

Un exemple pour le cas de mes include_once() :

page1.php

=======

<?

session_start();

$_SESSION[a]='a';

blabla;

if(blabla) include_once(page2.php);

?>

page2.php - cas 1

============

<?

session_start();

echo $_SESSION[a];

?>

php m'a créé une nouvelle session, je n'utilise donc plus la précédente, ok (compris).

page2.php - cas 2

============

<?

// session_start(); plus de nouvelle session.

echo $_SESSION[a]; toujours rien dans cette variable !

?>

.../...

bon, je viens de me documenter sur $_SESSION, (oui, j'aurais dû commencé par là !), mais je n'ai rien trouvé qui puisse m'aider à comprendre ce qui ne va pas dans mes include_once() de pages.

(Et j'ai vu que session_register() était plutôt obsolette.)

et il semble bien que le cas 2, soit le bon, mais rien dans la var.

(je viens de faire pleins d'essais dans tous les sens, rien n'y fait.)

* y aurait-il une sorte de php.ini qq part qui n'aurait pas un paramètre correct ?

Et puis (aussi) si quelqu'un aurait la gentillesse de m'expliquer globalement quelle tactique utiliser dans quel cas, pour la navigation ...

merci, à bientôt, :)

Nils.

Posté

Salut Nils,

Tu es obligé d'appeler session_start() avant toute sortie vers le navigateur pour éviter l'erreur "headers already sent"..

Attention aux lignes blanches avant le tag d'ouverture <?php, elles sont considérées comme une "sortie de données" et causeront cette erreur.

Ceci dit, voici l'exemple de 2 pages php avec passage de session:

Page 1

<?php 
// page1.php

session_start();

echo 'Bienvenue à la page #1';

$_SESSION['favcolor'] = 'vert';
$_SESSION['animal']   = 'chat';
$_SESSION['time']     = time();

// FOnctionne si les cookies sont acceptés
echo '<br /><a href="page2.php">page 2</a>';

// S'il le faut, tu peux passer le SID dans l'URL
echo '<br /><a href="page2.php?' . SID . '">page 2</a>';
?>

Page 2

<?php 
// page2.php

session_start();

echo 'Bienvenue à la page #2<br />';

echo $_SESSION['favcolor']; // vert
echo $_SESSION['animal'];   // chat
echo date('Y m d H:i:s', $_SESSION['time']);

// Tu peux utiliser le SID aussi, comme sur la page1.php
echo '<br /><a href="page1.php">page 1</a>';
?>

Cela devrait t'afficher les variables définies dans la page 1 ;)

Posté

bonjour à tous,

Et bien je reviens avec mes problèmes de variables de session que je n'arrive toujours pas à gérer.

Alors, j'ai laissé mes pages de côté et ai fait 2 petits scripts pour ne pas être polué par le reste de mon code.

Je vous les livre :


page 1 => a
page 2 =>

ALors quelqu'un voit-il une erreur flagrante ?

Ou faut-il que je transmette le SID à ma 2ième page ? (dans l'include ?)

Si oui, comment le récupérer dans la première, et comment le passer à la deuxième ?

Je dois dire, que je commence à être un peu perdu !

D'autant, que ça marchait avant sous un "serveur" MS(XP) + Apache + PHP, mais j'ai tout passé sous Mandrake,

est-ce que ça pourrait venir de là ?

Impossibilité de lire le répertoire qui contien les sessions par exemple, et pourtant le code PHP s'exécute sur le serveur, et c'est pas le client qui n'a aucun doit qui fait ça ...

Ou y a t-il un paramètre à positionner dans une sorte de php.ini ? et pourtant mon fichier de session est bien créé !

Ca ne peut quand même pas venir de IE ???

Si vous avez des idées ...

Je les testerais toutes !!!

allé, merci, à +

Nils.

Posté

re,

Bon, j'ai repassé ces 2 scripts de tests (page1.php et page2.php) sur ma machine MS (XP) + apache + PHP,

Et bien ça marche !!!

(bon j'ai vu que j'avais oublié des ' dans [a] et ai corrigé => ['a'] )

(curieusement ma machine "unix" n'en n'a pas parlé !!)

Donc le code est bon !

Alors, ça ne peut-être qu'un problème d'environnement, Mandrake, Apache, PHP ???

problème de droits ? de php.ini ?

quelqu'un à t'il des pistes de recherches ?

merci.

Nils.

Posté

Il ne faut pas utiliser, comme je disais plus haut, les tableaux de session $_SESSION et la fonction session_start();

C'est soit l'un, soit l'autre. Ce n'est pas la même génération de fonctions (dirais-je, pour raccourcir..), et il peut y avoir des conflits entre les 2.

Pour ce qui est du [a] et du ['a'], il faut savoir que dans le premier cas, le script cherchera la 'constante' a, alors que dans le second cas, le script cherchera l'index 'a' du tableau. Donc ca ne pouvait pas marcher... Et ca marchait ?? C'est toute la magie (et tout le problème) de php. Il est très.. subjectif.. :(

Pour ce qui est de ton 'include', il ne supporte pas dans tous les cas l'appel à un fichier distant. Ainsi, appeler un fichier avec 'http://' peut ne pas marcher dans certains cas. Ca vient de la configuration du php.ini.

Posté

Hello Anonymus !!!

Bon,

Je suis parti du principe que tu maîtrises et a éprouvé maintes et maintes fois ce dont tu me parles !

Et pourtant, je croyais bien avoir lu qq part qu'il fallait "toujours" initialiser la session avec un session_start().

MAIS !

Comme je suis informaticien de longue date, je sais qu'il faut toujours écouter ses pères avant d'aller plus loin !

Et mener à bien tous les tests préconisés, sauf si l'on est vraiment sûr de soit, et là, je ne l'étais pas du tout !

Alors, bien que ça marchait sur mon serveur MS, et après avoir trituré le php.ini de ma machine "Unix" dans tous les sens.

J'ai relu ton dernier post, et j'ai appliqué ce qui suit :

j'ai enlevé, session_start(),

mais aussi enlevé http://compaq/tests dans l'include !!!

ET CA MAAAARCHE !!!!

Je me suis même payé le luxe de déplacer page2.php dans un sous répertoire et modifier l'include en consécance: (aa/page2.php)

et ça marche encore !

Alors, bon, je sais pas ce que j'ai lu, je sais pas ce que j'ai pas compris.

Mais je sais maintenant que :

Les vars globales de sessions s'utilisent sans rien initialiser, et que dans un include, il ne faut pas mettre tout le chemin !

J'ai voulu passer tout ça sous Mandrake, car MS est vraiment trop permissif !

Ca marchais avec des session_start() dans toutes mes pages !!!!

Et je crois que j'ai eu bien raison, je n'aurais jamais su tout cela si j'avais continué d'utiliser mon serveur MS.

Par contre, une petite précision peut-être ?

Où sont maintenant stockées mes sessions, vu que je ne vois plus rien apparaitre dans /tmp (vu que plus de session_start() ),

Et pourtant, dans mon php.ini, "session.save_handler" est bien positionné à "files".

Si tu sais où sont, dans ce cas (sans session_start() ), stockées les sessions ?

C'est juste par curiosité, j'ai ce "défaut" ...

Enfin, un GRAND MERCI pour ta patience, elle a payée !!!

Je vais enfin pourvoir retourner à mon code.

Et j'espère pouvoir bien avancer sur ce foutu site, c'est passionnant, mais parfois on perd la boule !

Je pense qu'une fois terminer, et j'espère pas avant (mais ...), je reviendrais pour qu'il soit un peu plus standard et dans les normes.

Je sais que vous y êtes tous bien attachés, et moi aussi !

Je ne sais pas si tu seras là, à la soirée du 26, mais j'espère, pour pourvoir te donner une bonne poignée de main ou une paire de bises ...

Anonymus ? Mais qui es-tu donc ?

Mille merci.

Nils.

PS, pour ce qui est du a / 'a', non ça marchait pas, mais j'ai tout de suite compris le message d'erreur et ai corrigé immédiatement.

(Je me rappelle mes cours de C, à l'école, où le prof nous disait de bien faire attention à notre code, car le compilateur, lui, essayera toujours d'en tirer qq chose !!!, il semble que ce soit pareil pour PHP.)

Posté

Bon "Nicolas" !

Ce sera une bonne poignée de main !

Nils

(Nils est un prénom danois ou suédois, il correspond à Nicolas en français <;o) )

bon we.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...