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 :

$_SESSION utilisé correctement ?


Sujet :

Langage PHP

  1. #1
    Invité
    Invité(e)
    Par défaut $_SESSION utilisé correctement ?
    Bonjour,

    Je souhaiterai utiliser une variable d'une page dans une autre page.

    J'ai recherché ce qui pourrait convenir, et j'ai trouvé que $_SESSION pourrait correspondre à mon problème.

    Pour cela, j'ai utilisé session_start(). Mais je ne dois pas l'utiliser correctement (au bon endroit ?), car voici le message qu'il me met :

    'Warning: session_start(): Cannot send session cookie - headers already sent by...'

    Si quelqu'un s'y connaît dans ces détails techniques et peut m'aider, ce n'est pas refus

    Harry Potter

  2. #2
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344

  3. #3
    Membre à l'essai
    Profil pro
    Enseignant
    Inscrit en
    Décembre 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 28
    Points : 24
    Points
    24
    Par défaut
    session_start() se place en tout début. Avant toute les autres lignes de code.

    Edit : Les modos sont rapides dans ce forum

  4. #4
    Invité
    Invité(e)
    Par défaut
    Salut, et merci pour les réponses, je vais essayer de voir ça !

    J'avais déjà repéré qu'il fallait le mettre avant toutes les autres lignes de code, ce que j'ai fait mais ça fait pareil. Dois je le mettre donc avant la balise <html> ?

    Edit : J'ai pensé comme toi Virtuosity pour les modos, à tel point que je me demande s'ils ne sont pas salariés pour répondre aussi rapidement

  5. #5
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Oui, il faut le mettre avant tout envoi de données au client (que ce soit via echo, ou via une balise html, ou même un simple espace ou retour à la ligne avant <?php ).


    HS : non non, on n'est pas payés

  6. #6
    Invité
    Invité(e)
    Par défaut
    Erf non ça ne marche pas non plus, même en enlevant les retours charriots comme indiqué dans la FAQ que tu m'as montré Eusebe.

    Je commence à douter qu'il faille me servir de ce session_start() pour mon problème.

    A propos, je rappelle ce sur quoi je bloque : "...utiliser une variable d'une page dans une autre page.". C'est pourquoi $_SESSION me semblait adapté d'après ce que j'ai lu. N'y aurait t'il pas un autre moyen sinon ?

    HS : Zut dommage, je vais oublier l'idée de me faire embaucher auprès du site de developpez.com alors .

  7. #7
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Quand tu dis utiliser une variable d'une page dans une autre, tu veux bien dire après une nouvelle requête du client (clic sur un lien par exemple), et pas par inclusion je suppose ?

    Si c'est bien ça, les variables de session sont une bonne solution.

    peux-tu nous montrer le code de ta page qui ne fonctionne pas, et le message d'erreur complet ?

  8. #8
    Invité
    Invité(e)
    Par défaut
    Vu que mes pages sont un pt'it peu complexes (pour moi en tout cas), je pense que c'est effectivement bien après une requête du client que je veux utiliser une variable dans une autre page. (Sinon, qu'entends-tu par inclusion ?)

    Pour résumer un peu ce que je veux faire, je souhaiterai faire une ouverture de session pour un utilisateur sur le site. J'ai pour cela rajouté 'Se logger' et 'S'inscrire' en haut. Quand on clique sur 'Se logger', apparaît en haut de la page des champs 'Login' et 'Mot de passe'. Et c'est là que je souhaite utiliser des variables globales (pour retenir le login et le mot de passe). Car sinon, l'utilisateur voit qu'il est connecté (avec mon message 'Connecté(NomUtilisateur)') seulement après avoir cliqué sur le bouton 'Submit' pour se connecter à sa session.
    Donc avec des variables globales, quand l'utilisateur clique sur un autre lien du menu ou autres, ça permettrait de les récupérer dans les autres pages pour pouvoir ré-afficher l'état 'Connecté(NomUtilisateur)' en haut.

    Voilà ce que je souhaiterai faire, j'espère avoir bien résumé ça, car ce n'est pas forcément facile. C'est un cas que l'on voit sur beaucoup de site, voire la plupart, mais je ne sais pas du tout comment ça fonctionne derrière, donc pas évident pour moi qui commence à partir de presque "rien".

    Pour l'extrait de code, je vais essayer de faire ça. Me faut juste un peu de temps, comme c'est sur une autre machine que je travaille et qui n'est pas reliée à Internet.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Voici le code de ma page où il y a le session_start(), page nommée "SessionOuverte.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
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
      <meta http-equiv="content-type" content="text/html; charset=windows-1250">
      <meta name="generator" content="PSPad editor, www.pspad.com">
      <title>Session ouverte</title>
      </head>
      <body>
     
        <?php
          if (isset($_POST['txtLogin']))
          {//Session pas encore connectée (l'utilisateur vient de se connecter à sa session)
     
            //Ouverture d'une session pour stocker des variables globales
            session_start();
            //Stockage des valeurs en variable globale
            $_SESSION['Login'] = $_POST['txtLogin'];
          }
     
          //Affichage de l'état connecté du réalisateur
          echo "<p align='right'>
                  Connecté (".$_SESSION['Login'].")
                </p>";
        ?>
     
      </body>
    </html>
    Je pourrais montrer le code de la page qui contient le formulaire qui envoie les données à la page "SessionOuverte.php", mais comme elle passe par des pages intermédiaires ("Frames.php", "Session.php" puis enfin "SessionOuverte.php"), cela pourrait être quelque peu complexe. Et puis, en testant d'enlever ces pages intermédiaires, le message était le même, donc je ne pense pas me tromper en affirmant que le problème ne vient pas de là.

    Pour l'erreur affichée, la voici (il y en a deux à suivre en fait, presque équivalentes, à deux mots près) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Warning: session_start(): Cannot send session cookie - headers already sent by (output started at c:\program files\easyphp1-8\www\monsite\frames.php:13) in c:\program files\easyphp1-8\www\monsite\SessionOuverte.php on line 15
     
    Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\program files\easyphp1-8\www\monsite\frames.php:13) in c:\program files\easyphp1-8\www\monsite\SessionOuverte.php on line 15
    La ligne 15, c'est "session_start()". En le mettant tout au début du code, même erreur.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Ah ben voilà c'est bon j'ai réussi !!!!

    C'est exactement ce que vous m'avez dit au départ en fait, "...avant tout envoi de données au client...", "...se place avant toutes les lignes de code.".

    J'avais pas été assez loin dans ces remarques puisque j'avais bien mis avant mes lignes de code, mais uniquement de la page "SessionOuverte.php". Or, comme ce n'est pas la première page appelée, ce n'était pas tout à fait avant.

    Problème résolu en mettant vraiment avant toutes les lignes de code. C'est à dire au début de la première page appelée : "Frames.php".

    Merci beaucoup Virtuosity et Eusebe de m'avoir aidé là-dessus .

    Edit : Par contre, faut-t'il utiliser session_destroy() quelque part ? Parce que quand on démarre quelque chose, ça me paraît logique de l'arrêter. Mais je ne vois pas où. Car quand l'utilisateur se déconnecte, un simple unset() sur $_SESSION me semble suffisant pour ré-initialiser.

  11. #11
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2008
    Messages : 215
    Points : 170
    Points
    170
    Par défaut
    La session se détruit d'elle même au bout d'un certain temps d'inactivité (le visiteur quitte le site par exemple).
    Je crois que tu peux mettre un lien déconnexion qui provoquera session_destroy car je crois que niveau sécurité c'est un petit plus si ma mémoire est bonne.

  12. #12
    Invité
    Invité(e)
    Par défaut
    Ok merci pour ces infos Niki

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

Discussions similaires

  1. Ai-je correctement utilisé le mapping ?
    Par Athur dans le forum Windows
    Réponses: 3
    Dernier message: 25/03/2011, 14h55
  2. Réponses: 3
    Dernier message: 03/08/2007, 07h36
  3. [MR] L'héritage est il correctement utilisé ?
    Par fabszn dans le forum Schéma
    Réponses: 2
    Dernier message: 22/03/2007, 22h59

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