IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Comment utiliser session_start() dans un fichier inclus


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut Comment utiliser session_start() dans un fichier inclus
    Bonjour, après avoir passé pas mal de temps à lire les conseils et tuto sur le sujet, j'ai une question bien précise : est-il possible d'utiliser le script session_start() dans un fichier inclus via ma page index.php, de façon propre. Je m'explique. Mon site fonctionne trés bien, ma page d'identification + redirection avec ouverture de session charge la page concernée dans ma DIV dynamique. Et si j'enregistre cette page en favoris, quand je j'y reviens aprés fermeture du navigateur, ça me redirige vers ma page d'identification. Mais j'ai en + l'affichage du message d'erreur "Cannot modify header information - headers already sent by ...". Y a t-il moyen de vider la mémoire avant la redirection + session pour éviter ce message ? Merci d'avance.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 31
    Points : 27
    Points
    27
    Par défaut
    Citation Envoyé par nicolas2603
    Bonjour, après avoir passé pas mal de temps à lire les conseils et tuto sur le sujet, j'ai une question bien précise : est-il possible d'utiliser le script session_start() dans un fichier inclus via ma page index.php, de façon propre. Je m'explique. Mon site fonctionne trés bien, ma page d'identification + redirection avec ouverture de session charge la page concernée dans ma DIV dynamique. Et si j'enregistre cette page en favoris, quand je j'y reviens aprés fermeture du navigateur, ça me redirige vers ma page d'identification. Mais j'ai en + l'affichage du message d'erreur "Cannot modify header information - headers already sent by ...". Y a t-il moyen de vider la mémoire avant la redirection + session pour éviter ce message ? Merci d'avance.
    oui c'est tt à fait possible si tu n 'affiches rien ou n'envoies rien comme entêtes avant l'appele de session_start()!

    Ton erreur de header vient de là.... Essaie de séparer opérations(login, récupération de variable sur les table, etc..) et affichage de contenu, ça t'évitera des problèmes

    Exemple de programmation modulaire en PHP

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # tu traites les infos/opérations session dans un fichier spécifique (login par exemple)
    include("session.php");
     
    # tu inclus le header
    include("header.php");
     
    # si tu veux moduler par page alors tu utilises un argument en paramètre et tu inclus en fonction de la valeur
    if(!empty($_GET['page'])
     include("pages/{$_GET[page]}.php");
    else
     include("pages/accueil.php");
     
    #tu inclus le footer
    include("footer.php");
    Ceci est un SIMPLE exemple de modularité à adpater selon tes besoins....J'espère avoir pu t'aider un peu


  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut
    Et ça je le fais sur quel fichier ? Pour l'instant la structure de site ressemble à ça (désolé je débute et j'apprends sur le tas, c'est pas évident) :

    Mon fichier index.php est comme ça en gros :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <head></head>
    <body>
    <table width="830px" border="0" align="center"><tr><td>
    <div id="global">
     
    <div id="calque1" class="gauche">(menu fixe gauche)</div>
    <div id="calque2" class="haut">(menu fixe haut)</div>
    <div id="calque3" class="frame">
    <?php
    $pages=array(
    'accueil'=>'accueil.htm',
    'presentation'=>'presentation.htm',
    'activites'=>'activites.htm',
    'membre1'=>'zone_membre/membre1.php',
    'membre2'=>'zone_membre/membre2.php',
    'erreur'=>'zone_membre/erreur.php',
    'session'=>'zone_membre/session.php'
    );
    if(isset($_GET['page']) && array_key_exists($_GET['page'],$pages))
    include $pages[$_GET['page']];
    else
    include 'accueil.htm';
    ?>
    </div>
     
    </div>
    </td></tr></table>
    </body>
    </html>
    Et dans la div "calque3" se chargent les pages, dont celles qui sont sécurisées (membre1.php, membre2.php), qui commencent comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <? session_start();
    if(!isset($_SESSION['nom'])) {
    include('session.php');
    exit; } ?>
    <div></div>
    Et sont vérifiées par le script "login.php" entre index et membre 1, lequel est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    ...
    <?
    on se connecte à MySQL
    on sélectionne la base
     
    if(isset($_POST) && !empty($_POST['identifiant'])) {
      extract($_POST);
      // on recupère le password de la table qui correspond au login du visiteur
      $sql = "select nom, lien, passe from *** where nom='".$identifiant."'";
      $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
     
      $data = mysql_fetch_assoc($req);
     
      if($data['nom'] != $identifiant) {
      	$url_erreur="../index.php?page=erreur";
       	header("Location:$url_erreur");
    	exit;
    	}
     
      else {
        session_start();
        $_SESSION['nom'] = $identifiant; // si l'invité est bien logué
     
    	$destination=mysql_result($req,$i,"lien");
    	{
    	header("Location:$destination"); // on le redirige vers la page correspondant à son identifiant
    	}	
     
      }   
    }
    else {
      echo '<p>Vous avez oublié de remplir un champ.</p>';
       exit;
    }
     
    ?>
    Donc je modifie mon login.php ?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 82
    Points : 87
    Points
    87
    Par défaut
    J'ai du mal à comprendre pourquoi tu tiens absolument à mettre ton session_start() dans ton div.
    Il faut, à mon avis, que tu déclare ta session au tout debut de ton script, et tu laisse le reste comme ça.

    index.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    <?php session_start(); ?>
    <head></head>
    <body>
    <table width="830px" border="0" align="center"><tr><td>
    <div id="global">
     
    <div id="calque1" class="gauche">(menu fixe gauche)</div>
    <div id="calque2" class="haut">(menu fixe haut)</div>
    <div id="calque3" class="frame">
    <?php
    $pages=array(
    'accueil'=>'accueil.htm',
    'presentation'=>'presentation.htm',
    'activites'=>'activites.htm',
    'membre1'=>'zone_membre/membre1.php',
    'membre2'=>'zone_membre/membre2.php',
    'erreur'=>'zone_membre/erreur.php',
    'session'=>'zone_membre/session.php'
    );
    if(isset($_GET['page']) && array_key_exists($_GET['page'],$pages))
    include $pages[$_GET['page']];
    else
    include 'accueil.htm';
    ?>
    </div>
     
    </div>
    </td></tr></table>
    </body>
    </html>
    et ton div "calque3"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <? 
    if(!isset($_SESSION['nom'])) {
    include('session.php');
    exit; } ?>
    <div></div>
    rappelle toi qu'il faut toujours démarrer ta session avant d'envoyer quoi que ce soit comme code html ou autre.
    et ce n'est pas parce que tu demarre une session qu'il faut absolument s'en servir immediatement après l'avoir ouverte.

    @++
    "Soyez les changements que vous aimeriez voir dans le monde" Mahatma Gandhi

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut
    Oui je comprends tout à fait ce que tu me dis, mais j'essaye de démarrer ma session dans la div car je fais le site d'un bureau d'étude qui travaille pour différentes communes. Le site en lui même doit etre accessible par tous, mais j'aimerai que la session démarre seulement en cliquant sur le lien "espace technique", où chaque commune entre son identifiant. Si je fais comme l'exemple que tu me donnes, où le session_start est au début de l'index, il faut je suppose s'identifier dès l'arrivée sur le site, et ce n'est pas ce que je cherche. Il faut qu'il soit accessible pour tous, et connecté à une session au démarrage de l'espace technique. Et c'est ça que je ne sais pas si c'est faisable !!!

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut

    je viens de tester ce que tu m'as expliqué plus haut, mille excuses, apparemment ça a l'air de fonctionner nickel comme ça, il suffisait effectivement de mettre le session_start() au début de l'index, et ne pas mettre dans la page qui se charge. Merci beaucoup d'avoir enfin réussi à m'aider !!!

  7. #7
    Membre éclairé Avatar de J0r_x
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    804
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2006
    Messages : 804
    Points : 751
    Points
    751
    Par défaut
    Mets le des le debut et non dans ton div. session_start() "prépare" ta page à être utilisable pour les sessions, personne ne sera obligé de se connecter sur ton site parce que tu as mis session_start();

    EDIT: too late
    Aucune aide par MP, utilisez le forum.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 82
    Points : 87
    Points
    87
    Par défaut
    Ravi d'avoir pu t'aider !
    pense à mettre résolu en éditant ton premier post.

    @++
    "Soyez les changements que vous aimeriez voir dans le monde" Mahatma Gandhi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/10/2013, 21h57
  2. Utilisation de $PHP_SELF dans un fichier inclus
    Par Dia_FR dans le forum Langage
    Réponses: 6
    Dernier message: 20/09/2006, 18h36
  3. Réponses: 8
    Dernier message: 29/01/2006, 16h48
  4. Comment utiliser Opengl dans Visual Basic 6
    Par fun31 dans le forum OpenGL
    Réponses: 1
    Dernier message: 03/12/2004, 10h17
  5. [CR][VB6] comment utiliser CR dans VB ?
    Par kouassi_denis dans le forum SDK
    Réponses: 2
    Dernier message: 26/01/2004, 16h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo