Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/07/2011, 01h14   #1
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
Par défaut setter un cookie

Bonsoir,

je souhaite "setter" un cookie ; je fais un truc tout bête, mais ça ne "sette" pas le cookie :
Code :
1
2
3
4
5
<?php
session_start();
setcookie("connecte","1",time()+3214080000); 
echo 'cookie='.$_COOKIE["connecte"].'<br>';
?>
rien dans le cookie ; pourquoi ?
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2011, 10h45   #2
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
Pour être sûr qu'il n'y ait pas d'effet de bord, j'ai créé un fichier qui ne fait que ça, et toujours pas de cookie :
Code :
1
2
3
4
5
6
7
<?php 
session_start();
$var="1";
echo 'var='.$var.'<br>'; 
setcookie("login",$var,time()+3214080000);
echo 'cookie='.$_COOKIE["login"].'<br>';
?>
Et de plus, j'ai vérifié ; les cookies ne sont pas bloqués. Alors ?
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2011, 12h08   #3
Membre Expert
 
Inscription : août 2002
Messages : 1 036
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 1 036
Points : 1 166
Points : 1 166
Bonjour,

Extrait du manuel php :
Citation:
Les cookies font partie des en-têtes HTTP, ce qui impose que setcookie() soit appelée avant tout affichage de texte. Ce sont les mêmes limitations que pour header()
jeca est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2011, 12h22   #4
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
Je le savais et me suis fait avoir, mais comme ça :
Code :
1
2
3
4
5
6
7
<?php 
session_start();
$var="1";
setcookie("login",$var,time()+3214080000);
echo 'var='.$var.'<br>'; 
echo 'cookie='.$_COOKIE["login"].'<br>';
?>
c'est pareil...
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2011, 16h44   #5
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 456
Points : 8 456
ton temps n'est pas bon la
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2011, 16h58   #6
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
Ah bon ? C'est juste du copier-coller et ailleurs ça marche ; pour voir, j'ai réduis la valeur (time()+3000), mais ça ne change rien...
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2011, 17h59   #7
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 456
Points : 8 456
de tout façon le cookie est lu en debut de script, donc tu ne peux pas faire un setcookie et le lire juste apres, ca marchera la 2eme fois que tu lit la page, et n'oublie pas de toujours développé avec le niveau d'erreur maximum
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2011, 18h44   #8
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
Oui, en effet ; pour que la valeur du cookie soit affichée, je fais un refresh et c'est bon, mais qu'entends-tu par niveau d'erreur maximum ? Ca se règle avec un ini_set ?
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2011, 18h47   #9
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 456
Points : 8 456
Citation:
Envoyé par laurentSc Voir le message
Oui, en effet ; pour que la valeur du cookie soit affichée, je fais un refresh et c'est bon, mais qu'entends-tu par niveau d'erreur maximum ? Ca se règle avec un ini_set ?
ton display_errors sur On
ton error_reporting sur E_ALL | E_STRICT (ou -1)
ton output_buffering sur Off

soit en ini_set, si tu dev en local change direct les valeurs dans ton php.ini
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2011, 19h41   #10
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
Je ne développe pas en local car, je ne sais pas pourquoi, depuis plusieurs années, Wampserver ne marche plus. Mais j'ai mis
Code :
1
2
3
ini_set('display_errors', 'on');
ini_set('error_reporting', 'E_ALL | E_STRICT');
ini_set('output_buffering', 'off');
et ça a l'air d'aller. Par contre, il ne s'agissait évidemment que d'un essai ; en fait, je voudrais l'utiliser dans une gestion de connexion : si l'utilisateur se connecte, je "sette" le cookie ; comme ça, à son prochain passage sur le site, il sera connecté (s'il a autorisé les cookies), mais ça ne marche pas comme je voudrais : sur la page de connexion, j'ai mis :
Code :
1
2
3
4
<?php
session_start();
setcookie("connecte","1",time()+60*60*24*365); 
?>
et sur une page où l'on veut savoir si l'on est connecté :
Code :
1
2
3
4
5
6
<?php
session_start();
$exit=0;
if ( $_COOKIE["connecte"]!='1')  {  $exit=1; }
echo 'cookie='.$_COOKIE["connecte"].'<br>';
?>
mais même si on vient de se connecter, sur la 2e page, on ne l'est pas : pourquoi ?
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2011, 19h45   #11
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 456
Points : 8 456
en ini_set c'est

Code :
1
2
ini_set('error_reporting', E_ALL | E_STRICT);
// pas de quotes
pour ton wamp je te conseil de désinstaller tout, bine vérifier le port de ton IIS si tu t'en sert, installer les vrai package, apache sur apache.org, php sur php.net, mysql dur mysql.org

pour ton cookie faire :

Code :
$_COOKIE["connecte"]!='1'
va te lancer une erreur si le cookie n'existe pas, d'ou bien activé la gestion des erreurs et de travailler en local pour gagner du temps
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2011, 20h11   #12
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
Au départ, j'ai essayé sans les quotes :
Code :
1
2
3
4
5
6
7
8
<?php 
ini_set('display_errors', on);
ini_set('error_reporting', E_ALL | E_STRICT);
ini_set('output_buffering', off);
session_start();
$var="6";
setcookie("login",$var,time()+3000);
...
mais ça génère plein de warnings :
Citation:
Notice: Use of undefined constant off - assumed 'off' in /homepages/18/d246623212/htdocs/testcookie/testcookie.php on line 4

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /homepages/18/d246623212/htdocs/testcookie/testcookie.php:4) in /homepages/18/d246623212/htdocs/testcookie/testcookie.php on line 5

Warning: Cannot modify header information - headers already sent by (output started at /homepages/18/d246623212/htdocs/testcookie/testcookie.php:4) in /homepages/18/d246623212/htdocs/testcookie/testcookie.php on line 7
Pour Wampserver, je ne suis pas très motivé à essayer de le refaire marcher car à une époque j'avais chercher de l'aide sur leur forum et échec.

Et pour l'existence du cookie, est-ce que ça n'irait pas de conditionner le test que j'effectue par
Code :
isset($_COOKIE["connecte"])
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2011, 20h36   #13
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 456
Points : 8 456
je parlais juste pour le error_reporting pas pour tout les valeurs
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2011, 22h01   #14
Membre Expert
 
Avatar de Eric2a
 
Homme Eric Garidacci
Inscription : septembre 2005
Messages : 1 057
Détails du profil
Informations personnelles :
Nom : Homme Eric Garidacci
Âge : 41

Informations forums :
Inscription : septembre 2005
Messages : 1 057
Points : 1 564
Points : 1 564
Salut,

Citation:
Envoyé par laurentSc
Et pour l'existence du cookie, est-ce que ça n'irait pas de conditionner le test que j'effectue par
Code :
isset($_COOKIE["connecte"])
Oui, il faut vérifier l'existence de la variable pour déterminer sa valeur.

Tu peux faire comme ça...
Code php :
1
2
3
4
5
6
7
<?php
$connecte=(isset($_COOKIE['connecte'])&& $_COOKIE['connecte']==='1')?true:false;
if($connecte)
	echo "Vous êtes déjà connecté<br>";
else
	echo "Vous n'êtes pas connecté<br>";
?>
__________________

N'oubliez pas le vote des messages utiles ainsi que le Tag [Résolu].

Mon Site Web : Corse - Actualité, Météo, Vidéos, Logiciels, ...
Eric2a est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2011, 22h36   #15
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
Merci mais pour savoir si le cookie existe, j'ai fait un peu différemment :
Code :
1
2
3
4
5
6
7
8
9
10
<?php
session_start();
if (isset($_COOKIE["connecte"]))
    if ($_COOKIE["connecte"]=='1') $exit=0; 
    else $exit=1;	
 
else $exit=2;
echo 'cookie='.$_COOKIE["connecte"].'<br>';
echo 'exit='.$exit.'<br>';
?>
et comme $exit vaut 2, c'est que le cookie n'existe pas. Pourtant, lors de la connexion, je fais :
Code :
1
2
3
4
<?php
session_start();
setcookie("connecte","1",time()+60*60*24*365); 
?>
donc je ne comprends pas : avez-vous une idée ? Et d'autre part, à chaque fois que je dois gérer des cookies, je commence par un session_start() : est-ce nécessaire ?

Et sinon, OK pour ça :
Citation:
je parlais juste pour le error_reporting pas pour tout les valeurs
Ca ve effectivement mieux ; mais d'ailleurs, ça apporte quoi ce niveau d'erreur maximum ?
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2011, 22h59   #16
Membre Expert
 
Avatar de Eric2a
 
Homme Eric Garidacci
Inscription : septembre 2005
Messages : 1 057
Détails du profil
Informations personnelles :
Nom : Homme Eric Garidacci
Âge : 41

Informations forums :
Inscription : septembre 2005
Messages : 1 057
Points : 1 564
Points : 1 564
Quand tu te connectes sur un site en général :

- La page login.php pose le cookie et ensuite, nous redirige vers la page où on a cliqué sur connexion.
- Cette page vérifie la présence et la valeur du cookie pour savoir si nous sommes connectés ou non.


Toi, tu veux que ta page permettant de poser le cookie, gère aussitôt sa valeur. Ce qui est impossible !

Il faut bien comprendre que le cookie est créé une fois la page servie, en effet, il se trouve bien dans l'entête de la page.

La ligne $_COOKIE['connecte'] = '1' fait juste savoir à PHP qu'il devra ajouter un ligne dans l'entête du fichier.

session_start(); n'est pas nécessaire si tu n'utilises pas le tableau $_SESSION.


Le niveau d'erreur maximum est très intéressant pendant le développement. Il te permet de voir certains avertissements susceptibles de t'aider à mieux coder.
__________________

N'oubliez pas le vote des messages utiles ainsi que le Tag [Résolu].

Mon Site Web : Corse - Actualité, Météo, Vidéos, Logiciels, ...
Eric2a est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2011, 23h28   #17
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 456
Points : 8 456
Citation:
Envoyé par laurentSc Voir le message
Et sinon, OK pour ça : Ca ve effectivement mieux ; mais d'ailleurs, ça apporte quoi ce niveau d'erreur maximum ?

Comment vas tu savoir tes erreurs si tu ne les affiches pas ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2011, 23h31   #18
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
Citation:
Toi, tu veux que ta page permettant de poser le cookie, gère aussitôt sa valeur.
Mais justement, non ! Car j'ai bien une page dédiée (action_connexion.php) où je "sette" le cookie :
Code :
1
2
3
<?php
setcookie("connecte","1",time()+60*60*24*365); 
?>
et dans une autre page, je veux vérifier si je suis connecté :
Code :
1
2
3
4
5
6
7
8
9
<?php
if (isset($_COOKIE["connecte"]))
    if ($_COOKIE["connecte"]=='1') $exit=0; 
    else $exit=1;	
 
else $exit=2;
echo 'cookie='.$_COOKIE["connecte"].'<br>';
echo 'exit='.$exit.'<br>';
?>
Donc à priori, je fais comme tu dis (et ai viré les session_start() vu que je n'ai pas de session ici). Donc pourquoi ça ne marche pas ?
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2011, 23h48   #19
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 456
Points : 8 456
fait des sinon dans firefox pour voir les cookie :
clique droit dans la page -> information sur la page -> sécurité -> voir les cookies
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2011, 23h57   #20
Débutant
 
Homme Laurent
Webmaster
Inscription : octobre 2006
Messages : 2 873
Détails du profil
Informations personnelles :
Nom : Homme Laurent
Âge : 48
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Webmaster
Secteur : Industrie

Informations forums :
Inscription : octobre 2006
Messages : 2 873
Points : 1 320
Points : 1 320
J'ai fait comme tu dis ; pour aller plus vite, j'ai regardé le site sous FF, regardé les cookies et mon cookie y était bien et pourtant, quand je fais le test :
Code :
if (isset($_COOKIE["connecte"]))
c'est négatif ; qu'est-ce que je peux faire ?
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h17.


 
 
 
 
Partenaires

Hébergement Web