Cookies

Résolu/Fermé
foufou - 24 avril 2012 à 12:37
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 25 avril 2012 à 13:00
Bonjour,

Je suis actuellement en L3 informatique,je dois pour les cours travailler du web avec php et base de données.
J'ai ma page d'accueil(html,php) qui est un formulaire de connexion qui renvoie vers une page admin.php.(sans html)
Cette page(admin) inclut une page verif_login.php(sans html) qui verifie si le couple [login|pass] est le bon.Si oui alors je crée un cookie qui prend le login et un autre qui prend le pass.
Le problème que j'ai c'est que je ne peux pas créer de cookie ici.
J'ai toujours le même message d'erreur:
Warning: Cannot modify header information - headers already sent by (output started.....)

Je peux créer mes cookies que dans ma page d'accueil en les mettant avant toutes balises html.Donc avant mon formulaire de connexion.
Seulement on me demande de vérifier les entrées de l'utilisateur avant de les créer.
J'espère avoir été assez clair sinon demander moi mes scripts.



3 réponses

[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
Modifié par [Dal] le 24/04/2012 à 16:13
Salut foufou,

Php gère normalement les variables de session dans des cookies de session. Il fait cela tout seul pourvu que tu appelles la fonction session_start();.

Vois https://www.php.net/manual/en/function.session-start.php

L'appel à session_start(); doit être placé avant l'envoi de quoi que ce soit au navigateur.

Si ton formulaire dans la page d'accueil fait un "POST" du login et mot de passe, tu vas les récupérer dans admin.php avec tes variables de session, que Php va stocker tout seul dans un cookie de session.

Pour récupérer les valeurs, Vois les exemples à la suite.

Par exemple :
$identifiant = "";  
$mdp = "";  
if (isset($_POST['identifiant'])) {  
  $identifiant = $_POST['identifiant'];  
}  
if (isset($_POST['mdp'])) {  
  $mdp = $_POST['mdp'];  
}  
MaFonctionDeVerification($identifiant,$mdp);

Le message d'avertissement "Cannot modify header information - headers already sent ..." indique que tu as tenté d'utiliser une instruction concernant la manipulation d'entêtes http, alors qu'ils ont déjà été envoyés (ce qui est le cas, par exemple, si ton instruction est placée après avoir envoyé du texte au navigateur - à ce stade, les entêtes sont déjà partis).

C'est pour des raisons similaires que session_start(); doit être placé avant tout envoi d'une sortie quelconque au navigateur.


Dal
0
Merci de m'avoir répondu,je connais les sessions seulement le but de se TP était de ne pas s'en servir mais d'utiliser uniquement les cookies.
Finalement après avoir modifié mon code une centaine de fois,j'ai vu sur un site que l'encodage pouvait jouer.
Je suis donc passé de utf8 à utf8 sans bom et là miracle tout marche.

Merci quand même...
0
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
Modifié par [Dal] le 25/04/2012 à 13:11
Content pour toi.

Tu avais omis de préciser certaines choses.

Il n'y a pas de miracle.

Le marquage "BOM" de tes sources utf8 par l'éditeur que tu utilises sont des données qui codent un caractère invisible (zero-width no-break space). Comme il est situé au tout début du fichier, Php considère qu'il s'agit d'envoi de texte, et les entêtes http sont envoyés avant que tu puisses faire quoi que ce soit.

C'est un comportement qui est corrigé lorsque Php est compilé avec l'option --enable-zend-multibyte

https://bugs.php.net/bug.php?id=22108

Si ton Php n'est pas compilé avec cette option (qui semble devoir être prévue en standard en v6), et que tu tiens à faire de l'utf8, il faut effectivement supprimer ce marquage dans tes sources.

Sous Notepad++ c'est possible en sélectionnant l'encodage "utf8 (sans BOM)". Je suppose que c'est ce que tu as fait pour résoudre ton problème.


Dal
0