Transmission de variables de session
alex82
-
alex82 -
alex82 -
Bonjour,
Je n'arrive pas à transmettre les variables de session initialisées dans mon script aux autres pages de mon code. J'ai pourtant mis session_start(); en début de script ainsi qu'en début de script des autres pages mais rien ne se transmet!
Quelqu'un pourrait-il m'aider?
Merci d'avance,
Voici mon script :
Je n'arrive pas à transmettre les variables de session initialisées dans mon script aux autres pages de mon code. J'ai pourtant mis session_start(); en début de script ainsi qu'en début de script des autres pages mais rien ne se transmet!
Quelqu'un pourrait-il m'aider?
Merci d'avance,
Voici mon script :
<?php session_start(); ?> <div class="contenu2" style="height:250px;"> <?php //TABLES DE LA BASES DE DONNEE include('./tables.php'); //Fonction de connexion à la BDD include('./connexion_bdd.php'); // On démarre une session en récupérant $_SESSION['authen'], qui vaut NULL si //l'utilisateur n'est pas encore connecté ou // s'il a fait un essai infructueux, et vaut 'OK' s'il est connecté. // Un formulaire de connexion est décrit dans les bornes EOF suivantes. // $tableau est appelé dans un printf plus loin. $tableau = <<<EOF <div style="position:relative;width:50%;left:20%;"> <table> <form method="post" action="" name="formulairesession"> <tr> <td width=150><font face="Arial" size="2">Nom d'utilisateur :</font></td> <td><input type="text" name="pseudo_membre"></td> </tr> <tr> <td width=150><font face="Arial" size="2">Mot de passe :</font></td> <td><input type="password" name="passe_membre"></td> </tr> <tr> <td colspan=2 align="right"><input type="submit" name="Submit" value="Se connecter"></td> </tr> <input type="hidden" name="flag" value="1"> </form> </table> </div> EOF; if (isset($_POST['pseudo_membre'])){ $nom=$_POST['pseudo_membre']; } else{ $nom=''; } if (isset($_POST['passe_membre'])){ $mp=$_POST['passe_membre']; } else{ $mp=''; } if (isset($_SESSION['authen'])){ $authen=$_SESSION['authen']; } else{ $authen=''; } // PREMIER CAS : AFFICHAGE DU FORMULAIRE $tableau SI L'UTILISATEUR N'EST PAS CONNECTE if ($authen!='OK') { echo'<div style=\"text-align=center;\"><br/> <p>Veuillez saisir l\'identifiant et le mot de passe administrateur</p>'; if (!isset($_POST['flag']) || $authen!='OK') echo $tableau;// On affiche le formulaire de connexion echo'</div>'; $row=array(); $requete4="SELECT * from $base4 where login='".$nom."' and mdp='".$mp."'"; $row=connexion_bdd($requete4); // Cas 1: $row est vide (pas de correspondance) if ($row[0]['login'] == NULL or $row[0]['mdp'] == NULL){ $_SESSION['authen']=NULL; print("<h2 class=\"error\">Vous êtes déconnecté <br/>Vérifiez que tous les champs soient bien remplis</h2>"); // Cas 2: $row contient les deux éléments } else { $_SESSION['authen']='OK'; // On est connecté print("<h3>Vous êtes connecté</h3>"); echo "<a href=\"./index.php?note=3\">accueil:cliquez ici</a>"; } } // Fin du if // DEUXIEME CAS : L'UTILISATEUR EST DEJA AUTHENTIFIE CORRECTEMENT else { // Premier cas : la session est terminée (clic sur le bouton déconnexion) if (isset($_POST['fin_session'])) { print ("<h3 style=\"margin-top:100px;\"> Vous êtes déconnecté </h3>"); echo "<p><a href=\"./index.php?note=3\">Revenir à la page de gestion</a></p>"; session_destroy(); $_SESSION['authen']==NULL; // Deuxième cas : on affiche les liens (icones) vers la gestion des caméras et des paramètres ainsi que le changement de mot de passe } else { // Affichage des deux icones renvoyant aux caméras et aux paramètres echo " <div style=\"position: absolute; left:25%; width:15%; text-align:center;\" > <a href=\"./menucams.php\"> <img src=\"./images/gestionwm.bmp\" alt=\"cameras\" title=\"cameras\" style=\"width:100px\"/> </a> <p class=\"legende\">lien vers les pages caméras</p> </div> <div style=\"position: absolute; left:60%; width:15%;\" > <a href=\"./menuparametres.php\"> <img src=\"./images/gestionpm.bmp\" alt=\"parametres\" title=\"parametres\" style=\"width:100px\"/> </a> <p class=\"legende\">lien vers les paramètres</p> </div>"; //Affichage du lien indiquant le changement de mot de passe echo"<!-- Changement de mdp --> <p style=\"position: relative; text-align:center; top:80%;\">Pour changer login et mot de passe <a href=\"./changer_mdp.php\">cliquez ici</a> </p> <br/><br/><br/><br/><br/>"; // Bouton de déconnexion echo"<form class=\"centrebouton\" action=\"\" method=\"post\"> <p><input type=\"submit\" name=\"fin_session\" value=\"déconnexion\" /></p> </form>"; } } ?> </div>
A voir également:
- Transmission de variables de session
- Session invalide ou obsolète - Forum Consommation & Internet
- Ping échec de la transmission. défaillance générale ✓ - Forum Réseaux sociaux
- Teamviewer code de session expiré - Forum Logiciels
- Impossible de créer le fichier de travail. vérifiez la variable d'environnement temp ✓ - Forum Word
- Veuillez ouvrir une session avec les privilèges du gestionnaire ✓ - Forum Jeux vidéo
4 réponses
Bonjour,
S'il y a du code avant ça:
<?php
session_start();
?>
qui envoie des caractères, ça ne marchera pas...
Ce code:
<?php
session_start();
?>
Doit être en début de script php, exemple:
<?php
session_start();
?>
<html>
<head>
..........reste de la page.....
S'il y a du code avant ça:
<?php
session_start();
?>
qui envoie des caractères, ça ne marchera pas...
Ce code:
<?php
session_start();
?>
Doit être en début de script php, exemple:
<?php
session_start();
?>
<html>
<head>
..........reste de la page.....
Bonjour,
Justement, il n'y a pas de code avant le session_start();
J'ai essayé avec un code basique mais les variables de session
ne se transmettent toujours pas...
Je ne vois pas d'où ça peut venir?
Merci.
Justement, il n'y a pas de code avant le session_start();
J'ai essayé avec un code basique mais les variables de session
ne se transmettent toujours pas...
Je ne vois pas d'où ça peut venir?
Merci.
Bonjour,
Est-ce que tu as un message d'erreur ?
Essaie de rajouter à quelques endroits stratégiques dans ton code la ligne suivante :
var_dump($_SESSION);
qui t'affichera le contenu de la session en cours.
Autre piste : tes pages sont-elles encodées en UTF-8 ? Avec ou sans les BOM ? Car l'UTF-8 contient quelques caractères en en-tête du fichier (les BOM) qui ne sont pas affichés par l'éditeur de texte, mais qui sont considérés par PHP comme du texte à transmettre au client ; ce qui va donc débuter la génération de la page, les en-têtes HTTP et tout ce qui fait que session_start() ne pourra pas être exécuté.
Xavier
Est-ce que tu as un message d'erreur ?
Essaie de rajouter à quelques endroits stratégiques dans ton code la ligne suivante :
var_dump($_SESSION);
qui t'affichera le contenu de la session en cours.
Autre piste : tes pages sont-elles encodées en UTF-8 ? Avec ou sans les BOM ? Car l'UTF-8 contient quelques caractères en en-tête du fichier (les BOM) qui ne sont pas affichés par l'éditeur de texte, mais qui sont considérés par PHP comme du texte à transmettre au client ; ce qui va donc débuter la génération de la page, les en-têtes HTTP et tout ce qui fait que session_start() ne pourra pas être exécuté.
Xavier
Une dernière piste :
vérifie ton php.ini, et plus particulièrement le paramètre session.auto_start
En effet, si ce paramètre vaut 1, une session est automatiquement lancée au début de chaque page. Du coup, cela signifie que quand tu fais des session_start(), tu écrases la session en cours, car elle était déjà ouverte !
Donc, si ce paramètre vaut 1, il faut enlever les session_start() (ou passer le paramètre à 0)
vérifie ton php.ini, et plus particulièrement le paramètre session.auto_start
En effet, si ce paramètre vaut 1, une session est automatiquement lancée au début de chaque page. Du coup, cela signifie que quand tu fais des session_start(), tu écrases la session en cours, car elle était déjà ouverte !
Donc, si ce paramètre vaut 1, il faut enlever les session_start() (ou passer le paramètre à 0)
Toutes mes excuses : tu peux ignorer le commentaire précédent.
D'après la doc officielle PHP :
« A partir de PHP 4.3.3, appeler session_start() après qu'une session sois déjà démarrée émettra une erreur E_NOTICE. De plus la deuxième session démarrée sera tout simplement ignorée. »
Donc ce problème n'est plus d'actualité depuis... Php 4.3.3. Je me fais vieux.
D'après la doc officielle PHP :
« A partir de PHP 4.3.3, appeler session_start() après qu'une session sois déjà démarrée émettra une erreur E_NOTICE. De plus la deuxième session démarrée sera tout simplement ignorée. »
Donc ce problème n'est plus d'actualité depuis... Php 4.3.3. Je me fais vieux.
Re-bonjour,
Non je n'ai pas de message d'erreur, simplement à chaque fois que la page se recharge, c'est comme si c'était la première fois qu'elle se chargeait, on dirait qu'elle ne garde pas en mémoire les variables de session.
J'ai essayé de mettre var_dump($_SESSION); un peu partout dans le code et ça montre bien que la session ne se transmet pas!
Pourtant avec la version PHP 5.2.0 ça marche mais pas avec la version PHP 4.3.9 (la mienne). J'ai bien vérifié, il n'y a aucun caractère avant le session_start();
Non je n'ai pas de message d'erreur, simplement à chaque fois que la page se recharge, c'est comme si c'était la première fois qu'elle se chargeait, on dirait qu'elle ne garde pas en mémoire les variables de session.
J'ai essayé de mettre var_dump($_SESSION); un peu partout dans le code et ça montre bien que la session ne se transmet pas!
Pourtant avec la version PHP 5.2.0 ça marche mais pas avec la version PHP 4.3.9 (la mienne). J'ai bien vérifié, il n'y a aucun caractère avant le session_start();