Variable de session PHP.
Eti38
Messages postés
57
Statut
Membre
-
Atropa Messages postés 2051 Statut Membre -
Atropa Messages postés 2051 Statut Membre -
Bonjour,
je me met au php et j'ai un problême de transmission de variable de session:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>Bienvenue sur mon site !</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<p>
<CENTER>ESSAI SESSION</CENTER><br />
<?php
if (!isset($_SESSION['var'])){//var pas encore defini.
session_start();
$_SESSION['var']= 10;
$var=$_SESSION['var'];
echo " Premier passage var = $var ";
}
else{//var deja defini.
$_SESSION['var']=$_SESSION['var']-1;
$var=$_SESSION['var'];
echo " var = $var ";
}
?>
<CENTER>
<a href="essai_session.php">Clique ici pour decrementer var.</a><br />
</CENTER>
</p>
</body>
</html>
Problême:
a chaque affichage de la page, je constate que var n'est pas défini.. il repasse a chaque fois dans le if .....
je croyait qu'une fois défini au premier passage,elle irait ensuite ds le else,j'ai peut-être manqué quelquechose....
PS:je ne sais pas si on peut mettre le codes ds un emplacement prevus...
je me met au php et j'ai un problême de transmission de variable de session:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>Bienvenue sur mon site !</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<p>
<CENTER>ESSAI SESSION</CENTER><br />
<?php
if (!isset($_SESSION['var'])){//var pas encore defini.
session_start();
$_SESSION['var']= 10;
$var=$_SESSION['var'];
echo " Premier passage var = $var ";
}
else{//var deja defini.
$_SESSION['var']=$_SESSION['var']-1;
$var=$_SESSION['var'];
echo " var = $var ";
}
?>
<CENTER>
<a href="essai_session.php">Clique ici pour decrementer var.</a><br />
</CENTER>
</p>
</body>
</html>
Problême:
a chaque affichage de la page, je constate que var n'est pas défini.. il repasse a chaque fois dans le if .....
je croyait qu'une fois défini au premier passage,elle irait ensuite ds le else,j'ai peut-être manqué quelquechose....
PS:je ne sais pas si on peut mettre le codes ds un emplacement prevus...
A voir également:
- Variable de session PHP.
- Easy php - Télécharger - Divers Web & Internet
- Www.yahoomail.com ouverture de session - Forum Yahoo mail
- Expert php pinterest - Télécharger - Langages
- Session invalide ou obsolète - Forum Consommation & Internet
- Vba excel sélectionner une plage de cellules variable ✓ - Forum VB / VBA
7 réponses
Bonjour,
Les sessions utilisent des cookies. Or, les cookies sont placées dans les en-têtes de la réponse HTTP.
Ces en-têtes sont envoyés au navigateur client par le serveur PHP au moment où le premier morceau du corps de la page est envoyé. Dans ton cas, les en-têtes HTTP sont générées et envoyé quand le serveur PHP arrive à ta première ligne : <!DOCTYPE...
Donc, quand PHP arrive à ton session_start(), il ne peut pas exécuter l'instruction, qui suppose de modifier les en-têtes pour y mettre le cookie (d'ailleurs, tu as dû recevoir un Warning: Headers already sent, non ?).
Résultat, la session ne peut pas être commencée.
Pour résoudre ce problème, il te suffit donc de placer ton code PHP, et principalement le session_start(), avant tout envoi de données, en début de fichier. Par exemple, comme ceci :
Les sessions utilisent des cookies. Or, les cookies sont placées dans les en-têtes de la réponse HTTP.
Ces en-têtes sont envoyés au navigateur client par le serveur PHP au moment où le premier morceau du corps de la page est envoyé. Dans ton cas, les en-têtes HTTP sont générées et envoyé quand le serveur PHP arrive à ta première ligne : <!DOCTYPE...
Donc, quand PHP arrive à ton session_start(), il ne peut pas exécuter l'instruction, qui suppose de modifier les en-têtes pour y mettre le cookie (d'ailleurs, tu as dû recevoir un Warning: Headers already sent, non ?).
Résultat, la session ne peut pas être commencée.
Pour résoudre ce problème, il te suffit donc de placer ton code PHP, et principalement le session_start(), avant tout envoi de données, en début de fichier. Par exemple, comme ceci :
<?php
$sortie_session = "";
if (!isset($_SESSION['var'])){//var pas encore defini.
session_start();
$_SESSION['var']= 10;
$var=$_SESSION['var'];
$sortie_session = " Premier passage var = $var ";
}
else{//var deja defini.
$_SESSION['var']=$_SESSION['var']-1;
$var=$_SESSION['var'];
$sortie_session = " var = $var ";
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>Bienvenue sur mon site !</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<p>
<CENTER>ESSAI SESSION</CENTER><br />
<?php echo $sortie_session; ?>
<CENTER>
<a href="essai_session.php">Clique ici pour decrementer var.</a><br />
</CENTER>
</p>
</body>
</html>
bonjour session_start(); dois être appelé à chaue début de page et pas seulement pour initialiser la session
met session_start() au dessus du doctype et hors du if et ça ira mieux...
met session_start() au dessus du doctype et hors du if et ça ira mieux...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Oui effectivement !
On teste si $_SESSION['var'] existe avant de relancer session_start()... Donc évidemment, il n'existe pas encore !
On teste si $_SESSION['var'] existe avant de relancer session_start()... Donc évidemment, il n'existe pas encore !
J'ai avancé, et j'ai maintenant un problême avec ce code:
<?php
session_start();
if (isset($_GET['relaunch_session'])){//redemarage de session
echo "Redemarage de la session en cours......";
$_SESSION = array();
session_destroy();
echo "Redemarage de la session effectué.";
}
if (isset($_SESSION['var'])){
echo "-----LA variable var est deja defini .";
}
else{//on a jamais defini var
echo " On a jamais defini var ";
$_SESSION['var']= 3;
echo " var vient d'être defini.";
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>Bienvenue sur mon site !</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<p>
<CENTER>ESSAI SESSION
<br /><br /><br /><br /><br /><br /><br />
<a href="essai_session.php">Clique ici pour relancer la page.</a><br />
<br /><br /><br /><br /><br /><br /><br />
<a href="./essai_session.php?relaunch_session=0">Cliquez ici pour reinitialiser la session !</a></CENTER>
</p>
</body>
</html>
je vous décrit le comportement:
->tout d'abord, je fais une réinitialisation.ce qui affiche:
Redemarage de la session en cours......Redemarage de la session effectué. On a jamais defini var var vient d'être defini.
jusque la tout va bien, il me dit lui même que la variable $_SESSION['var'] est defini. je suis content
->donc, je fais un réaffichage de la page et voila ce qu'il affiche:
On a jamais defini var var vient d'être defini.
->si je relance encore la page , il affichera bien:
-----LA variable var est deja defini .
mais j'avoue ne pas comprendre pourquoi il ne le fait pas au premier réaffichage, alors qu'il dit lui même que
$_SESSION['var'] est defini...
j'ai fait un autre test ou l'on voit que la fonction isset renvoie avant le 1er réaffichage que la var est défini...
comment peut-elle être defini juste avant de cliquer sur le lien et ne plus l'être juste aprés...
je nage totalement, si quelqu'un peut m'aider,
peut-être que j'ai omis quelquechose...
merci d'avance
<?php
session_start();
if (isset($_GET['relaunch_session'])){//redemarage de session
echo "Redemarage de la session en cours......";
$_SESSION = array();
session_destroy();
echo "Redemarage de la session effectué.";
}
if (isset($_SESSION['var'])){
echo "-----LA variable var est deja defini .";
}
else{//on a jamais defini var
echo " On a jamais defini var ";
$_SESSION['var']= 3;
echo " var vient d'être defini.";
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>Bienvenue sur mon site !</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<p>
<CENTER>ESSAI SESSION
<br /><br /><br /><br /><br /><br /><br />
<a href="essai_session.php">Clique ici pour relancer la page.</a><br />
<br /><br /><br /><br /><br /><br /><br />
<a href="./essai_session.php?relaunch_session=0">Cliquez ici pour reinitialiser la session !</a></CENTER>
</p>
</body>
</html>
je vous décrit le comportement:
->tout d'abord, je fais une réinitialisation.ce qui affiche:
Redemarage de la session en cours......Redemarage de la session effectué. On a jamais defini var var vient d'être defini.
jusque la tout va bien, il me dit lui même que la variable $_SESSION['var'] est defini. je suis content
->donc, je fais un réaffichage de la page et voila ce qu'il affiche:
On a jamais defini var var vient d'être defini.
->si je relance encore la page , il affichera bien:
-----LA variable var est deja defini .
mais j'avoue ne pas comprendre pourquoi il ne le fait pas au premier réaffichage, alors qu'il dit lui même que
$_SESSION['var'] est defini...
j'ai fait un autre test ou l'on voit que la fonction isset renvoie avant le 1er réaffichage que la var est défini...
comment peut-elle être defini juste avant de cliquer sur le lien et ne plus l'être juste aprés...
je nage totalement, si quelqu'un peut m'aider,
peut-être que j'ai omis quelquechose...
merci d'avance
<?php
session_start();
//N'utilise pas un doctype si ce n'est pas pour respecter le standard qui vas avec !
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr">
<head>
<title>Bienvenue sur mon site !</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<p><?php
if (isset($_GET['relaunch_session'])){//redemarage de session
//echo "Redemarage de la session en cours......"; // Inutile de mettre ça ça prend à peine un milième de seconde
//session_destroy(); après un appel de session_destroy() il faut forcément rapeller session_start() et avant que qoi que ce soit soit généré
//plus simple :
unset($_SESSION);
echo "Redemarage de la session effectué.";
}
if (isset($_SESSION['var'])) echo "-----LA variable var est deja defini .";
else{//on a jamais defini var
//echo " On a jamais defini var "; // Inutile également si elle vient d'être définit c'est qu'elle n'y était pas...
$_SESSION['var']= 3;
echo " var vient d'être defini.";
}
?></p>
<p style="text-align: center;">
ESSAI SESSION
<br /><br /><br /><br /><br /><br /><br />
<a href="essai_session.php">Clique ici pour relancer la page.</a>
<br /><br /><br /><br /><br /><br /><br /><br />
<a href="./essai_session.php?relaunch_session=0">Cliquez ici pour reinitialiser la session !</a>
</p>
</body>
</html>
Les sessions sont appelé par la variable $_SESSION['champ'] et les cookies par $_COOKIE['champ'].
Ils peuvent toutefois avoir une utilisation similaire.
Pour les varaiables de session, il faut placer au début de la page:
Ne rien mettre avant ça.
Les cookies se déclare avec ce code:
<?php $temps='3600'; setcookie('nom', 'contenu', (time() + $temps)); ?>Il suffit ensuite de simplement placer la variable pour l'utiliser.
J'espère avoir clarifié un peu le problème.