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 �clair�
    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
    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
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    31
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 31
    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 �clair�
    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
    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 �clair�
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    82
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 82
    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.

    @++

  5. #5
    Membre �clair�
    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
    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 �clair�
    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
    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
    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

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

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

    @++

+ 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