Problème de session déjà ouverte

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 : Problème de session déjà ouverte

par Jean-Michel-Lyon » 15 avr. 2007, 13:32

Salut,

Merci à vous, je vais réécrire mon code.

Jean-Michel

par Cyrano » 15 avr. 2007, 09:16

Attention aux confusions :
La session, c'est un contenant : il ne faut pas faire d'amalgames avec les variables de session qu'on peut définir ou manipuler un peu partout dans le code.

Lorsque tu écris session_start(), la première chose à éviter, c'est de le préfixer avec un "@" : cette manière de masquer les erreurs est à bannir;

Ensuite, on n'inscrit cette ligne QUE dans le fichier racine de la page : pas dans les fichiers inclus. Si tu as une page fichier_x.php dans lequel tu as include("fichier_y.php"), il sera normal de créer ou de relancer la session dans le premier, mais il ne faut pas l'écrire dans le second, ce serait tenter de démarrer une nouvelle session dans la même page, opération déjà effectuée par le fichier racine.

par Invité » 15 avr. 2007, 01:15

Salut,

Le problème est que si j'enlève session_start() où je mémorise ma variable de session, la mémorisation ne fonctionnera plus, et si j'enlève session_start() des pages où je teste l'existence de ma variable de session, le test d'existence de ma variable ne fonctionnera pas.

Je reconnais que c'est assez curieux, mais j'ai du mal à comprendre.

Jean-Michel

par Truc » 15 avr. 2007, 01:01

ça veut dire que tu ouvres deux session, donc deux fois session_start(), sur la même page (même fichier) .... si tu inclus le bout de code dans un autre tu peux l'enlever du fichier inclus.

par Jean-Michel-Lyon » 15 avr. 2007, 00:51

Bonsoir,

Le Message d'erreur est
Notice: A session had already been started - ignoring session_start() in C:\index.php on line 3
Jean-Michel

par Truc » 15 avr. 2007, 00:39

Salut,

Et le message d'erreur ressemble à
Cannot modify header information ?

Problème de session déjà ouverte

par Jean-Michel-Lyon » 15 avr. 2007, 00:18

Bonsoir,

Je place dans une variable de session un login, et afin d'éviter que des internautes non logés puissent accéder aux pages, je vérifie sur chaque page que ma variable de session existe, pour celà je fais un session_start() sur chaque page, le problème est que j'ai un message d'erreur qui indique que ma session est déjà ouverte. Ma session est déja ouverte parce que j'ai du l'ouvrir lors de la mémorisation de ma variable de session.
Je peux bien évidemment mettre @ devant session session_start() afin d'éviter l'affichage des erreurs, mais ce n'et pas très propre je préfèrerai avoir un code nickel.

Merci de votre aide.

Pour info, ici mon code de mémorisation de variable

Code : Tout sélectionner

<?php session_start(); if(isset($_POST['login'])) { if($_POST['login']=="secret") { extract($_POST); $_SESSION['login'] = $login; echo 'Vous etes bien logué'; include 'index.php'; break; } else { include 'login.php'; } } else { include 'login.php'; } ?>
et voici le code que je place sur chacune de mes pages

Code : Tout sélectionner

// recuperation de la session courante @session_start(); if(!isset($_SESSION['login'])) { echo 'Vous n\'êtes pas autorisé à acceder à cette page'; include('login.php'); exit; }
Jean-Michel