Perte partielle de mes variables de session

Eléphanteau du PHP | 10 Messages

04 oct. 2005, 17:40

Bonjour à tous!!!

Je viens faire appel à la sagesse du forum phpFrance pour un probleme des plus étranges. Actuellement stagiaire dans une association, je suis chargé de créer un site internet avec une plateforme de mise à jour (un accès "administration du site").

Pour ce second espace, j'utilise les mécanismes de session php.

Alors que tout marchait bien en local, je ne peut plus réaliser d'opération de maintenance sur mon site depuis qu'il a été mis en circulation sur un serveur. En effet, mes variables de session disparaissent en partie - leur valeur devient "" (nulle) apres un changement de page -.

Avant de mettre du code, voici comment mon espace webmaster fonctionne:

1) Arrivée sur une page d'authentification
- Saisie login/password
- capture et mise en sesion de l'adresse IP du client
- Capture et mise en session de son niveau de droits d'administrateur
2) Choix d'une opération/modification par le client
3) Remplissage du formulaire correspondant
- Capture des données saisies en session
4) Affichage d'une page récapitulative des saisies ou l'ont peut confirmer l'insertion de données
5) Déclanchement de l'insertion apres validation

En fait, entre le moment où l'on peut observer le récapitulatif des saisies (étape 4) et le moment où celles-ci sont inserées en bases (étape 5), il y a perte de mes variables de session relatives à l'enregistrement ET NON CELLE RELATIVES A L'ADRESSE IP ET AUX DROITS :?: ce qui m'empeche donc toute insertion...

C'est à en perdre mon latin...

Ma question est : comment cela est-ce possible :shock: ?

PS: Les variables de session disparaissent uniquement entre l'etape 4 et 5 (testé)
PS2: J'aurais pu réaliser ce travail avec des parametres URL mais la confidentialité de certaines données m'empechent de le faire...
PS3: Il y a bien un session_start() a tout début de page

Eléphant du PHP | 357 Messages

04 oct. 2005, 17:53

mmm :roll:
peut on voir le code de la page 5 ?
ca nous mettrai peu etre sur la piste

Mammouth du PHP | 19672 Messages

04 oct. 2005, 19:29

Est-ce que tu as bien un session_start() en premier à chaque chargement de nouvelle page et pour toutes les pages ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 10 Messages

05 oct. 2005, 09:28

Est-ce que tu as bien un session_start() en premier à chaque chargement de nouvelle page et pour toutes les pages ?
Oui... j'ai bien cette commande sur toutes mes pages...

VOICI MON CODE DE L'ETAPE 5
En fait celui-ci repose sur une serie de tests "if" sur mes variables de sessions. La reconnaissance d'un certain nb d'entres elles (les champs obligatoires de mes formulaires) permet la réalisation du type d'insertion.Par le bias de la méthode "echo je suis ici", j'ai pu comprendre qu'aucun test "if" ne s'exécutait car mes variables de session avaient disparues (info egalement vérifiée par echo)

Je ne vous en poste qu'un extrait - l'enssemble de la page ayant la meme mécanique en ce qui concrene les autres insertions.

Code : Tout sélectionner

<?php session_regenerate_id(); session_start(); if (!session_is_registered("ip") or !($_SESSION['ip'] == $_SERVER['REMOTE_ADDR'])) // Vérification des données de session { include("./erreur_identification.php"); // Redirection vers la page erreur_identification.php affichant un message exit; // Arrêt de l'exécution du script -> tout le reste ne sera pas affiché } // Navigation dans les différents menus en fonction des droits if ($_SESSION['niveau'] == 1) { $chemin = './espace_webmaster1.php'; } else { if ($_SESSION['niveau'] == 2) { $chemin = './espace_webmaster2.php'; } else { if ($_SESSION['niveau'] == 3) { $chemin = './espace_webmaster3.php'; } } } // tests (les deux premieres variables existent mais pas les autres) //echo $_SESSION['ip']; //echo $_SESSION['niveau']; //echo $_SESSION['titre_actu']; //echo $_SESSION['date_actu']; //echo $_SESSION['emeteur_actu']; //echo $_SESSION['contenu_actu']; //echo $_SESSION['lien_actu']; // Connexion à MySql et à la base de données mysql_connect("localhost", "root", "") or die ("impossible de se connecter à MySQL"); mysql_select_db("tecnosud") or die ("impossible de se connecter à la base de données"); // -------------------------------------- DONNEES RELATIVES AUX ACTUALITES GENERALES ------------------------------------------- if(isset($_SESSION['titre_actu']) and isset($_SESSION['date_actu']) and isset($_SESSION['emeteur_actu']) and isset($_SESSION['contenu_actu']) and isset($_SESSION['lien_actu'])) { // Recupération des variables de session // Des anti-slashes sont insérés pour déspécialiser les caractères spéciaux qui pourraient être insérés dans les champs $titre_actu=addslashes($_SESSION['titre_actu']); $date_actu=addslashes($_SESSION['date_actu']); $emeteur_actu=addslashes($_SESSION['emeteur_actu']); $contenu_actu=addslashes($_SESSION['contenu_actu']); $lien_actu=addslashes($_SESSION['lien_actu']); // Requête d'insertion $requete = mysql_query("insert into actualites (idActualites, titreActualites, dateActualites, emeteurActualites, contenuActualites, lienActualites) values ('','$titre_actu','$date_actu','$emeteur_actu','$contenu_actu','$lien_actu')") or die ("requête d'ajout incorrecte"); // Destruction des variables de session (pour éviter les doubles affichages par la suite) unset($_SESSION['titre_actu']); unset($_SESSION['date_actu']); unset($_SESSION['emeteur_actu']); unset($_SESSION['contenu_actu']); unset($_SESSION['lien_actu']); // réorientation vers la page d'acueil du webmaster header("Location: ./$chemin?message=1"); }
Voila.... Je suis bien sur dispo pour toute autre demande d'info

Merci d'avance

Mammouth du PHP | 19672 Messages

05 oct. 2005, 09:32

Et si tu démarrais la session avant d'en regénérer l'id ?
<?php
session_start();
session_regenerate_id();

//...
:?:
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 10 Messages

05 oct. 2005, 10:01

Rien ne change.... Tjrs affichage d'une page blanche...
La boucle n'est pas executée :cry:

Mammouth du PHP | 19672 Messages

05 oct. 2005, 10:24

Sur la ligne suivante, il y a un test qui devrait également être corrigé comme ceci:
if (!isset($_SESSION['ip']) or ($_SESSION['ip'] != $_SERVER['REMOTE_ADDR'])) // Vérification des données de session
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 10 Messages

05 oct. 2005, 11:26

J'ai trouvé la solution!!!

Ce matin, je me suis lance à tester mes id de session (par echo) et j'ai de suite compris... :D

En fait, une utilisation maladroite des "include" (notemment pour apeller la page d'insertion) provoquait la création d'une nouvelle session php dans laquelle etaient stockées mes données à inserer en base. Je me retrouvait donc avec deux sessions et seulement une (celle contenant adresse IP et droits) "mobilisée" dans mon script.

J'ai remplacé mes "includes" par des "header" et la seconde session n'a pas ete créee...

Je poste donc la solution pour d'autres personnes ds ma situation..

merci pr vos réponses :D

Creasitenet
Invité n'ayant pas de compte PHPfrance

19 déc. 2010, 13:14

Il manque un exit(); après ton header.

Mammouth du PHP | 19672 Messages

19 déc. 2010, 13:21

Il manque un exit(); après ton header.
Creasitenet, tu peux nous expliquer l'idée générale de ton intervention totalement inutile ? Le sujet date de 2005.
Avec ton pseudo, j'ai idée que tu tentes de monter ton nombre de post pour te permettre d'avoir un lien vers ton site histoire de te faire la publicité. Ce genre de méthode n'est pas spécialement apprécié ici. :evil:
Et c'est sans compter que comme tu as posté en invité, ça ne sert strictement à rien.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: