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 :

[Sécurité] session et redirection


Sujet :

Langage PHP

  1. #1
    Débutant
    Inscrit en
    Février 2006
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 158
    Points : 48
    Points
    48
    Par défaut [Sécurité] session et redirection
    Bonjour,
    J'ai enfin réussit à me créer une BDD et un page pour une ouverture de session. Je ne connaissais rien au PHP avant hier et j'ai réussit, en glanant ça et là des infos à me monter une page ! Je suis plutôt content ! ENfin bref... il me reste encore quelques petites problèmes non résolus : j'ai donc construit ma page qui va vérifier que le login correspond bien avec le mot de passe que l'utilisateur a entré dans le formulaire et ensuite une page affiche "vous être bien logué !"
    Ce que je voudrais maintenant c'est qu'une fois logué, l'utilisateur soit automatique redirigé vers son espace perso. J'ai trouve la commande | header ("location: http://monsite.fr"); | mais ça ne fontionne pas (cf. : ligne 28 du code) ! voici un bout du code pour mieux comprendre :
    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
    1 <?
    ...
    18  else {
    19    session_start();
    20    $_SESSION['pseudo'] = $pseudo;
    21    echo $_SESSION['pseudo']; 
    22    echo '<br> Vous êtes bien logué';
    23    echo '<br> Maintenant direction <a href="http://www.google.fr">www.google.fr</a>';
    24 header ("Location: http://google.fr");		
    25 
    26
    27	// ici vous pouvez afficher un lien pour renvoyer
    28    // vers la page d'accueil de votre espace membres
    29  }   
    30 }
    31 else {
    32  echo '<p>Vous avez oublié de remplir un champ.</p>';
    33   include('login.htm'); // On inclut le formulaire d'identification
    34   exit;
    35 }
    36 
    37 ?>
    -----------------
    Vous voyez pourquoi ça ne marche pas ???
    Voici l'erreur qui s'affiche quand je teste ma page :
    Warning: Cannot modify header information - headers already sent by (output started at /var/www/sdc/b/f/monsite/php/sessions/login5.php:21) in /var/www/sdc/b/f/monsite/php/sessions/login5.php on line 24
    Merci de votre aide qui ne pourrait m'être que bénéfique !

  2. #2
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    Salut, essaie en mettant la ligne 24 (header...) entre les lignes 19 et 20. Ca donne quoi :

  3. #3
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    La fonction header permet de fixer la valeur pour un header HTTP de
    réponse. Dans le protocole HTTP, les headers sont envoyés avant le contenu. Par exemple, si le serveur retourne une page html:

    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
     
    HTTP/1.1 200 OK
    Date: Tue, 19 Dec 2000 15:32:13 GMT
    Last-Modified: Sun, 10 Dec 2000 17:59:10 GMT
    Content-Length: 770
    Content-Type: text/html
     
    <html>
    <head>
    <title>titre</title>
    </head>
    <body>
    Hello
    </body>
    </html>
    La fin des headers est marquée par une ligne vide, ensuite le contenu
    de la page est envoyé.

    La permière commande echo ou print produit du résultat de 'contenu'
    et provoque l'envoi des headers HTTP avant. Donc si tu veux intervenir
    au niveau des headers tu dois le faire avant d'envoyer du contenu comme
    te la suggéré Nesmontou. Il faut notter aussi que tout ce qui est code html
    avant l'ouverture du marqueur php <?php est du 'contenu' (même un
    simple espace).

    Si tu essaye d'intervenir au niveau des headers et que du contenu est
    déjà produit tu obtient un message d'erreur "Headers already sent".

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 159
    Points : 160
    Points
    160
    Par défaut
    Le header est l'en-tete du fichier qui comprends plein d'infos le concernant, tels que son type, l'encodage, l'url (location) etc etc...

    Le browser se sert donc du header pour savoir comment afficher les infos qu'il a recu.

    Le fait est donc, qu'une fois que qqch est écrit dans la page, le header est fermé et envoyé, tu ne peux donc plus le modifier.

    header("location: url") n'est donc utile que pour effectuer des redirections sur une page qui n'affiche rien (un long script qui gère une base de données par exemple, et redirige ensuite)


    Si tu veux afficher qqch et puis rediriger apres quelques secondes il faut plutot te tourner vers le meta tag

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <meta http-equiv="Refresh" content="4;url=http://www.domain.com/link.html">
    Ou bien une fonction javascript sur un onload qui redirige avec un setInterval. Mais le meta est vachement plus simple

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Tient pile poil ce que je recherchais!

    Donc si j'ai bien compris quand on fais un header (redirection ou pas) Il ne peut pas être changé si on a deja envoyé un contenut mais par contre il n'est pris en compte qu'aprés le traitement du reste de la page!

    Donc en gros si on a une page à rediriger on met le header tout de suite aprés session_start quoi qu'il arrive! Comma ça on est sur de pas avoir d'erreur? (Je sais pas pourquoi mais ça m'as l'air trop simple comme ça
    )

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

Discussions similaires

  1. [Debutant(e)]Timeout de session et redirection page acceuil
    Par xhercule dans le forum Servlets/JSP
    Réponses: 11
    Dernier message: 26/12/2007, 11h23
  2. [Tomcat] session expirée redirection vers une page
    Par Casp dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 19/01/2006, 11h45
  3. [VB.NET] Durée vie var session vs redirect page login
    Par fabthebreton dans le forum ASP.NET
    Réponses: 5
    Dernier message: 16/12/2004, 17h35
  4. Réponses: 2
    Dernier message: 05/10/2004, 22h43

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