Probleme avec les sessions

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Probleme avec les sessions

par PetarouxRay » 04 mars 2008, 13:44

très bien.

en tous cas merci dOm et Korg pour la solution et vos réactions rapides :)

par d0m » 04 mars 2008, 11:34

Peux être que ton système d'inclusion est pas si bien choisi.

Si ta page profil.php est appelé par plusieurs pages :
- tu mets session_start au début de chacune de ces pages.
- tu fais tes opérations propres à la page
- tu inclus ton fichier profil.php

Je ne sais pas si c'est mieux mais j'ai pour habitude de faire l'inverse :
Avoir un fichier php contenant le code html et avec au début un include de fichiers contenant les traitements PHP.

par PetarouxRay » 04 mars 2008, 11:23

Bon...

alors voila, j'ai enlevé comme tu as dis le "$_SESSION["adrMail"] = $ChMail;"
pour le mettre dans la page "profil.php";
Je suis donc obligé de me connecter a la base au début de ma page pour aller chercher l'info.

Code : Tout sélectionner

<?php // On prolonge la session session_start(); // On teste si la variable de session existe et contient une valeur if(empty($_SESSION['login'])) { // Si inexistante ou nulle, on redirige vers le formulaire de login header("Location: ../authentification.htm"); exit; }else { mysql_connect("localhost", "root", ""); // Connexion à MySQL mysql_select_db("portailinternet "); // Sélection de la base de données //création de la requéte SQL $sql = "SELECT * FROM membres WHERE login = '".$_SESSION['login']."'"; //exécution de la requéte SQL $requete = @mysql_query($sql) or die ('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); //on récupére le résultat $result = mysql_fetch_array($requete); $_SESSION["adrMail"] = $result['mail'] ; mysql_close(); } ?>
Ça marche nickel.
C'est pas "dangereux" quand même d'ouvrir les connections à la base ici ?

par d0m » 04 mars 2008, 10:55

Voilà c'est exactement ce que je disais, l'erreur se produit dans ton fichier inclus profil.php.
C'est donc un session_start en trop.
Il va donc falloir ordonner ton code différemment. Pour n'avoir besoin que de faire un seul session_start.

- Soit tu enlèves session_start de profil.php et tu le rajoutes dans tous les fichiers qui l'inclus.

- soit tu déplaces la ligne
$_SESSION["adrMail"] = $ChMail;
après l'inclusion, si c'est possible.

par PetarouxRay » 04 mars 2008, 10:42

bonjour,

j'ai deux page php :
"profil.php" qui contient le html (le formulaire) ainsi que le code de sécurisation de la page, donc un session_start(); .

et "validProfil.php" qui contient le code d'insertion dans la base de la nouvelle adresse (donc sans session_start).


pour Korg : voila le mesage d'erreur si je rajoute session_start dans "validProfil.php" :
Notice: A session had already been started - ignoring session_start() in c:\program files\easyphp1-7\www\internetlocal\accueil\votreespace\portail\site_portail\Profil.php on line 3

par Korg » 04 mars 2008, 10:28

Bonjour,

Quel est le message d'erreur exact ?

Korg

par d0m » 04 mars 2008, 10:27

Dans une page PHP, il faut mettre session_start avant de toucher aux variable de sessions.
Par contre il n'en faut pas 2 dans la même page.

Il faut donc bien ajouter session_start avant
$_SESSION["adrMail"] = $ChMail;
Regarde bien la ligne qui pose problème dans le message d'erreur, tu n'aurais pas un appel à session_start dans le fichier inclus plus tard ?
include("Profil.php");

Probleme avec les sessions

par PetarouxRay » 04 mars 2008, 10:18

bonjour,

J'ai donc un petit soucis de gestion des sessions.
On accède a différente page d'un site après s'être authentifié. Si l'authentification est correcte, on ouvre une session.

En supposant que ce code suffit a sécurisé l'ensemble, il est inséré a chaque début de page :

Code : Tout sélectionner

<?php // On prolonge la session session_start(); // On teste si la variable de session existe et contient une valeur if(empty($_SESSION['login'])) { // Si inexistante ou nulle, on redirige vers le formulaire de login header("Location: ../authentification.htm"); exit; } ?>

On ouvre donc bien une session ici.

Ensuite dans ma page, qui est une page de gestion de profil, je peux changer mon email de contact.
Quand je veux le changer donc, après appui sur le bouton confirmation, l'action du formulaire est une page php. Outre le fait d'acceder a la base de donner et de vérifier la validité de l'adresse, voici le code :

Code : Tout sélectionner

// L'adresse mail a changée ? if($ChMail != $result['mail']) { $sql = "UPDATE membres SET mail='".$ChMail."' WHERE login='".$ChLogin."'"; $res = mysql_query($sql) or die ('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); $txtMail = "L'adresse mail a été changé"; $_SESSION["adrMail"] = $ChMail; include("Profil.php");
On voit ici donc que je rajoute une entrée a la globale $_SESSION. (qui me permettra de ré afficher la nouvelle adresse mail quand on rafraichira la page. Comme ca :

Code : Tout sélectionner

<input name="ChMail" type="text" id="ChMail" value=" <?php if(!empty($_SESSION["adrMail"])) {echo "";}else{echo $_SESSION["adrMail"];} ?> " size="30" />

En espérant être clair.
Le problème étant, que la mise a jour ne se fait pas.
Par contre, si je rajoute un session_start(); avant de rajouter l'entrée $_SESSION["adrMail"] = $ChMail; ca marche. Mais un message d'erreur apparait me disant qu'une session est deja ouverte.

A l'aide :) merci