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 31/12/2011, 17h24   #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 création de cookie

Bonjour,

j'ai un souci pour créer un cookie : j'ai un système d'inscription et quand celui-ci est appelé, je crée un cookie ainsi :
Code :
if (! isset($_COOKIE["login"])) {setcookie("login",$_POST["login"],time()+3214080000);
puis sur une autre page, j'ai ça :
Code :
1
2
3
	if (isset($_COOKIE["login"])) $cookie=$_COOKIE["login"]; else $cookie='existe pas';
echo "<td width=120>cookie=".$cookie."</td>";	
//echo "<td>cookie=".(isset($_COOKIE["login"]))?($_COOKIE["login"]):('existe pas')."</td>";
(l'opérateur ternaire ne voulait pas marcher non plus) Et le cookie n'existe pas : pourquoi ?
__________________
Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2011, 17h51   #2
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 454
Points : 3 454
Que retourne setcookie( ) ?
setcookie( ) est-il bien appelé avant toute sortie HTML ?
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2011, 18h56   #3
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:
setcookie( ) est-il bien appelé avant toute sortie HTML ?
Oui, car je fais une bufférisation de la sortie ( ob_start()...echo...setcookie...ob_end_flush()).

Citation:
Que retourne setcookie( ) ?
Je n'avais pas pensé à le tester, mais j'ai modifié le code et il retourne bien "true" ("1").
__________________
Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2011, 19h49   #4
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 454
Points : 3 454
Citation:
Envoyé par laurentSc Voir le message
Je n'avais pas pensé à le tester, mais j'ai modifié le code et il retourne bien "true" ("1").
Regarde dans le navigateur si le cookie est bien créé.
Eventuellement rajoute un $path et un $domain au cookie lors de sa création, cf. doc.
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2011, 20h09   #5
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
Même si mon navigateur habituel est IE, j'ai regardé avec FF comme il permet de regarder les cookies et effectivement, il n'y en a aucun. Que puis-je faire ?
__________________
Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2011, 23h19   #6
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 454
Points : 3 454
Citation:
Envoyé par laurentSc Voir le message
Même si mon navigateur habituel est IE, j'ai regardé avec FF comme il permet de regarder les cookies et effectivement, il n'y en a aucun. Que puis-je faire ?
1. Faire ce que j'ai dit plus haut ;
2. T'assurer qu'il n'y a aucun envoi au navigateur avant le setcookie et le ob_start, BOM UTF-8 par exemple ;
3. Déplacer le setcookie pour identifier la portion posant problème.
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/01/2012, 02h31   #7
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
1er post 2012 : bonne année

sinon, j'ai essayé d'améliorer la situation, mais encore problème.

- D'abord, avant le ob_start(), rien.
- Ensuite, j'ai déplacé le setcookie :
Code :
1
2
3
4
5
6
7
<?php ob_start();
session_start();
include_once("connect.php");
include_once("config.php");
$id_conn = connect();
if (isset($_COOKIE["login"])) {setcookie("login",$_COOKIE["login"],time()-100);setcookie("login",$_COOKIE["login"],time()-100);  setcookie("login",$_POST["login"],time()+3214080000);}
else {$res=setcookie("login",$_POST["login"],time()+3214080000,'.vercorshandisport.org'); setcookie("connecte","true",time()+3214080000);echo "cookie cree"; }...
- ensuite, m'étant aperçu que le fichier n'était pas en utf-8 (sans BOM), j'ai changé l'encodage ;
- Quand je regarde avec FF, le cookie semble créé ;
- cela dit, si je teste $_COOKIE['login'] sur une autre page, il n'existe toujours pas...
__________________
Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/01/2012, 12h28   #8
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 454
Points : 3 454
Bonne année également

Comme ça on y voit plus clair. J'ai commenté le script.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
 
ob_start();
session_start();
 
include_once("connect.php");
include_once("config.php");
 
if (isset($_COOKIE["login"])) {
    setcookie("login",$_COOKIE["login"],time()-100);
    setcookie("login",$_COOKIE["login"],time()-100); // Pourquoi un 2nd appel ?
    setcookie("login",$_POST["login"],time()+3214080000); // $_POST['login'] existe toujours ?
} else {
    $res=setcookie("login",$_POST["login"],time()+3214080000,'.vercorshandisport.org'); // $domain est mal placé, regarde la doc et donne un $path et un $domain corrects
    setcookie("connecte","true",time()+3214080000); // J'espère que ce n'est pas cela qui va déterminer si l'utilisateur est connecté
    echo "cookie cree";
}
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/01/2012, 14h23   #9
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 rajouté mes réponses à tes commentaires.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 <?php
 
ob_start();
session_start();
 
include_once("connect.php");
include_once("config.php");
 
if (isset($_COOKIE["login"])) {
    setcookie("login",$_COOKIE["login"],time()-100);
    setcookie("login",$_COOKIE["login"],time()-100); /* Pourquoi un 2nd appel ? Il ne sert à rien ; je ne m'en étais pas aperçu ... */
    setcookie("login",$_POST["login"],time()+3214080000); /* $_POST['login'] existe toujours ? Normalement, oui, vu que cette page est 
l'action d'un formulaire html contenant un champ <input name="login"...> et que j'ai prévu ,avant de faire le setcookie, un contrôle 
comme quoi le champ est bien renseigné */
} else {
    $res=setcookie("login",$_POST["login"],time()+3214080000,'.vercorshandisport.org'); /* $domain est mal placé, regarde la doc et 
donne un $path et un $domain corrects. J'avais fait cette page uniquement de mémoire et avais oublié un truc : 
$res=setcookie("login",$_POST["login"],time()+3214080000,'/','.vercorshandisport.org'); (et le nom de domaine est complet, vu qu'il 
n'y a pas de www) */
    setcookie("connecte","true",time()+3214080000); /* J'espère que ce n'est pas cela qui va déterminer si l'utilisateur est connecté. 
Et pourquoi ? */
    echo "cookie cree";
}
Mais même là, ça ne marche toujours pas...
__________________
Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/01/2012, 21h20   #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
Pour en avoir le coeur net, j'ai fait cet essai :
Code :
1
2
3
4
5
6
7
8
9
10
11
<?php ob_start();
session_start();
header('Content-Type: text/html; charset=utf-8');
include_once("connect.php");
include_once("config.php");
$id_conn = connect();
//if (isset($_COOKIE["login"])) {setcookie("login",$_COOKIE["login"],time()-100); setcookie("login",$_POST["login"],time()+3214080000);}
//else {$res=setcookie("login",$_POST["login"],time()+3214080000,'/','.vercorshandisport.org'); setcookie("connecte","true",time()+3214080000);echo "cookie cree"; }
//$res=setcookie("login",$_POST["login"],time()+3214080000);
$res=setcookie("login","test");
...
et dans une autre page :
Code :
1
2
if (isset($_COOKIE["login"])) $cookie=$_COOKIE["login"]; else $cookie='existe pas';
echo "cookie=".$cookie;
...et le cookie n'existe pas . Que faire pour qu'il existe ?
__________________
Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/01/2012, 22h22   #11
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 454
Points : 3 454
D'abord fais au plus simple :

cookie_1.php :
Code :
1
2
3
4
5
6
<?php
 
setcookie('foo', 'bar', strtotime('+1 year')) ;
 
?>
<a href="cookie_2.php">Page cookie 2</a>
cookie_2.php :
Code :
1
2
3
4
<?php
 
echo '<pre>' ;
print_r($_COOKIE) ;
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 00h05   #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
D'abord, j'ai viré dans les setcookies les dates d'expiration car "strtotime" générait plein de warning et que si je laissais ce que j'avais mis au début (time()+3214080000), le cookie n'est pas créé...

Ensuite, si je prends ton exemple légèrement modifié :
Code :
1
2
3
4
5
6
<?php
 
setcookie('foo', 'bar') ;
 
?>
<a href="cookie_2.php">Page cookie 2</a>
ça marche bien, mais si je mets cookie_2.php dans un autre répertoire (comme c'est dans mon cas), le cookie "foo" n'existe plus :
Code :
1
2
3
4
5
6
<?php
 
setcookie('foo', 'bar') ;
 
?>
<a href="../forum/cookie_2.php">Page cookie 2</a>
tu y comprends quelque chose ?
__________________
Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 00h33   #13
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 454
Points : 3 454
Citation:
Envoyé par laurentSc Voir le message
si je mets cookie_2.php dans un autre répertoire (comme c'est dans mon cas), le cookie "foo" n'existe plus
Faut préciser un $path dans setcookie cf. la doc http://fr.php.net/setcookie c'est bien expliqué.
Toi tu lui donne un domaine en $path.
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 09h08   #14
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'avais pas fait gaffe que la valeur par défaut de $path était le répertoire dans lequel était défini le cookie.
J'ai donc mis le $path, mais ça ne marche toujours pas :
Code :
setcookie('foo', 'bar','/','.vercorshandisport.org') ;
qu'est-ce qui manque encore ?
__________________
Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 09h22   #15
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 808
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 808
Points : 35 787
Points : 35 787
Ton navigateur accepte bien les cookies ?
Parce que
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
setcookie('foo', 'bar');
?>
<!doctype html>
<html lang="fr">
<head>
	<meta charset="utf-8" />
	<title>Cookie</title>
	<script>
		alert(document.cookie);
	</script>
</head>
<body>
</body>
</html>
fonctionne correctement...
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 09h41   #16
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, ça, ça marche bien ; c'est d'ailleurs ce que je disais à 00h05...
__________________
Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 12h19   #17
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 voulu modifier un peu le code pour lire le cookie dans un autre répertoire que celui où il est créé :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php 
setcookie('foo', 'bar','/','.vercorshandisport.org');
?>
<!doctype html>
<html lang="fr">
<head>
	<meta charset="utf-8" />
	<title>Cookie</title>
	<!--<script>
		alert(document.cookie);
	</script>-->
</head>
<body>
<a href="../action_sidentifi/cookie_2.php">cookie_2.php</a>
</body>
</html>
cookie_2.php :
Code :
1
2
3
4
5
<?php
 
echo '<pre>' ;
print_r($_COOKIE) ; 
?>
et voilà :
Citation:
Warning: setcookie() expects parameter 3 to be long, string given in /homepages/18/d246623212/htdocs/essai2/forum/test.php on line 2
__________________
Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 12h31   #18
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 454
Points : 3 454
Citation:
Warning: setcookie() expects parameter 3 to be long, string given in /homepages/18/d246623212/htdocs/essai2/forum/test.php on line 2
Manque la valeur d'expiration du cookie, cf. la doc
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 12h40   #19
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, effectivement, la mettre enlève le warning, mais autant si on reste dans le répertoire, le cookie est vu, mais en dehors, il n'y est plus :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php 
setcookie('foo', 'bar',time()+1000000,'/','.vercorshandisport.org');
?>
<!doctype html>
<html lang="fr">
<head>
	<meta charset="utf-8" />
	<title>Cookie</title>
	<script>
		alert(document.cookie);
	</script>
</head>
<body>
<a href="../action_sidentifi/cookie_2.php">cookie_2.php</a>
</body>
</html>
y a-t-il encore un bug évident ?
__________________
Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell
laurentSc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 14h41   #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
Comme $_COOKIE est une variable globale, comment expliquer cela ?
__________________
Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell
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 08h45.


 
 
 
 
Partenaires

Hébergement Web