Page 1 sur 1

Problème de session déjà ouverte

Posté : 15 avr. 2007, 00:18
par Jean-Michel-Lyon
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

Posté : 15 avr. 2007, 00:39
par Truc
Salut,

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

Posté : 15 avr. 2007, 00:51
par Jean-Michel-Lyon
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

Posté : 15 avr. 2007, 01:01
par Truc
ç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.

Posté : 15 avr. 2007, 01:15
par Invité
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

Posté : 15 avr. 2007, 09:16
par Cyrano
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.

Posté : 15 avr. 2007, 13:32
par Jean-Michel-Lyon
Salut,

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

Jean-Michel