Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
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 12/09/2011, 10h35   #1
Invité de passage
 
Inscription : mars 2008
Messages : 23
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 23
Points : 1
Points : 1
Par défaut [Cookies] la méthode setcookie fonctionne en local, mais pas sur l'hébergeur

Slt à tous , je viens d'héberger mon site web sur planethoster et je rencontre un souci avec la création d'un cookie. Voila ou je rencontre un souci :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
				if(!(setcookie("champsForm[nom]",$_POST['nom']))){
									echo "<script type='text/javascript'>
									alert('Probleme avec la methode setcookie');
									</script>";
				}
 
 
				setcookie("champsForm[message]",$_POST['message']);
				setcookie("champsForm[email]",$_POST['email']);
				setcookie("champsForm[url]",$_POST['url']);	
 
				echo "<script type='text/javascript'>
					alert('Erreur de recopie du champs de sécurité');
					window.location.replace('signature.php');
				</script>";
Ce code est exécuté lorsque l'utilisateur recopie mal le captcha d'un formulaire. On récupère tous les champs que l'utilisateur a rempli dans un cookie, on laisse un message comme quoi le captcha a mal été recopié, on réactualise par la suite et on pré-rempli les champs des anciennes infos de l'utilisateur grâce au cookie.
Le Hic c'est que la méthode setcookie me retourne false sur l'hébérgeur mais sur ma machine en local ca fonctionne très bien. Alors qu'est ce qui peut faire que ca ne fonctionne pas ? Est ce que par sécurité l'hébergeur planethoster bloque par défaut les cookies?
vince-29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 11h56   #2
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Avez-vous essayé de mettre le path et le domain ?

Code :
setcookie ("TestCookie", "", 0, "/", ".example.com");
Par ailleurs, pourquoi passer par les cookies ? Surtout que là vous créez 4 cookies pour un simple formulaire...

Les sessions, c'est bien aussi...
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 14h16   #3
Invité de passage
 
Inscription : mars 2008
Messages : 23
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 23
Points : 1
Points : 1
En fait je veux faire un formulaire assez élaboré. C'est à dire que les champs obligatoire du formulaire doivent être bien informés (grâce aux expressions régulières) pour que le bouton de validation (du formulaire) devienne actif.
Pour cela je crée un cookie en php et je le récupère par la suite en javascript, voici le code javascript :
Code :
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
	<script language="javascript" type="text/javascript">
 
 
    /*déclaration d'un tableau*/
		var tabChampMess=new Array;
 
 
		for(i=0;i<5;i++){
 
			if((i==1)||(i==2)){//email et url facultatif donc champs valides par defaut
				tabChampMess[i] = 1;
			}  
			else{//sinon c'est obligatoire donc a zero
				tabChampMess[i] = 0;
			}
 
		}
 
		function getCookie(sName) {
        var cookContent = document.cookie, cookEnd, i, j;
        var sName = sName + "=";
 
        for (i=0, c=cookContent.length; i<c; i++) {
                j = i + sName.length;
                if (cookContent.substring(i, j) == sName) {
                        cookEnd = cookContent.indexOf(";", j);
                        if (cookEnd == -1) {
                                cookEnd = cookContent.length;
                        }
                        return decodeURIComponent(cookContent.substring(j, cookEnd));
                }
        }       
        return null;
		}
 
 
		if(getCookie('champsForm[nom]')){
			var id = 1;
			var txtOrigin = getCookie('champsForm[nom]');
			txtModif = txtOrigin.replace(/(\+)/g, ' ');
			document.getElementById(id).value=txtModif ;
			verifMessage(1);
			document.cookie= 'champsForm[nom]'+"="+escape('');
		}
 
		else{
			alert('probleme');
		}
 
		if(getCookie('champsForm[email]')){
			var id = 2;
			document.getElementById(id).value = getCookie('champsForm[email]');
			verifMessage(2);
			document.cookie= 'champsForm[email]'+"="+escape('');
		}
 
		if(getCookie('champsForm[url]')){
			var id = 3;
			document.getElementById(id).value = getCookie('champsForm[url]');
			verifMessage(3);
			document.cookie= 'champsForm[url]'+"="+escape('');
		}
 
		if(getCookie('champsForm[message]')){
			var id = 4;
			var txtOrigin = getCookie('champsForm[message]');
			txtModif = txtOrigin.replace(/(\+)/g, ' ');
			document.getElementById(id).value=txtModif ;
			verifMessage(4);
			document.cookie= 'champsForm[message]'+"="+escape('');
		}
 
 
 
	function verifMessage(idChampMess){
 
		switch(idChampMess){
			case 1: regexp = /^(.{1,30})$/; /*nom de la personne*/
			break;
			case 2: regexp = /^(([a-zA-Z0-9_-])+([.]?[a-zA-Z0-9_-]{1,})@([a-zA-Z0-9-_]{2,}[.])+[a-zA-Z]{2,3})$/; /*expression régulière email*/
			break;
			case 3: regexp = /https?:\/\/([-\w\.]+)+(:\d+)?(\/([\w/_\.]*(\?\S+)?)?)?/;/*url*/
			break;
			case 4: regexp = /^(\r|\n|\r\n)|(.)+$/; /*message*/
			break;
			case 5: regexp = /^(.+)$/; /*captcha*/
			break;
		}
 
		var champMess = document.getElementById(idChampMess).value;
 
			if((idChampMess==1)||(idChampMess==4)||(idChampMess==5)){/*nom de la personne ou message ou captcha*/
 
			  if(champMess.match(regexp)){
					document.getElementById(idChampMess).style.background = '#ffffff';
					tabChampMess[idChampMess-1]=1;
			  }
 
			  else{
					document.getElementById(idChampMess).style.background = '#f6e3e3';
					tabChampMess[idChampMess-1]= 0;
			  }
 
			}
 
			else{/*email ou url*/
 
 
			  if((champMess.match(regexp))||(champMess=='')){
					document.getElementById(idChampMess).style.background = '#ffffff';
					tabChampMess[idChampMess-1]=1;
			  }
 
			  else{
					document.getElementById(idChampMess).style.background = '#f6e3e3';
					tabChampMess[idChampMess-1]= 0;
			  }	
 
			}
 
		validationMessage();
 
		}
 
 
		function validationMessage(){
 
			var regExpMess = true;
 
			for(i=0;i<5;i++){
				if(tabChampMess[i]==0){
					regExpMess = false;
				break;
				}  
			}
			if(regExpMess){
				document.getElementById(6).disabled=false;
				document.getElementById(6).style.cursor= 'pointer';
			}
			else{
			 document.getElementById(6).disabled=true;
				document.getElementById(6).style.cursor= 'default';		
			}
 
		}
 
 
	</script>
J'ai testé en mettant le path et le domain ca fait la même chose, vraiment bizarre ! Au pire j'essaierai avec les sessions si ca ne marche toujours pas !
vince-29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 17h08   #4
Nouveau Membre du Club
 
Inscription : juillet 2011
Messages : 36
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 36
Points : 27
Points : 27
Je ne fais que répéter un classique, la fonction setcookie échoue forcément s'il y a une quelconque sortie avant son appel.
Si tu fais un echo, ou s'il y a une erreur AVANT le setcookie(), setcookie renverra FALSE forcément.






Autre chose, s'assurer coté client (via javascript) que les champs d'un formulaire sont bien remplis sert essentiellement à épargner de la bande passante (moins de formulaires "mal remplis" validés via submit).

Mais cela est entièrement "optionnel" parce que même rempli les informations peuvent être incorrectes (donc on doit redemander les bonnes informations, et présenter à nouveau le formulaire).

J'ai l'impression que ton script rend obligatoire

1°) l'utilisation de cookie. Actuellement rares sont les utilisateurs qui désactivent les cookies.
2°) l'utilisation de javascript. Les utilisateurs qui coupent java ne sont pas rares.

Et que donc tu rends ton script inaccessible aux personnes qui désactivent java sur leur navigateur, pourtant ce script n'a pas l'air de faire grand chose de très important (laisser un message ?) qui justifierait l'obligation d'accepter javascript.
Doonge est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 17h21   #5
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Citation:
Envoyé par vince-29 Voir le message
En fait je veux faire un formulaire assez élaboré. C'est à dire que les champs obligatoire du formulaire doivent être bien informés (grâce aux expressions régulières) pour que le bouton de validation (du formulaire) devienne actif.
Pour cela je crée un cookie en php et je le récupère par la suite en javascript, voici le code javascript :
En quoi est-ce élaboré ? C'est le fonctionnement de quasiment tous les formulaires en ligne maintenant. Ils n'utilisent juste pas la même méthode que toi

Les étapes devraient être (mais ce n'est pas une obligation) :
  1. Affichage du formulaire 1 (session vide, tout est "normal")
  2. Remplissage du formulaire 1
  3. "Submit" du formulaire 1 capté par JS
  4. 1ere Validation via JS des champs (économie de temps de chargement et de bande passante)
  5. si pas ok, affichage du message (et/ou modification du DOM) directement dans le DOM
  6. si ok, (vrai) submit du formulaire vers PHP
  7. Récupération par PHP, 2e validation
  8. si ok, redirection vers la page de remerciement (par exemple)
  9. si pas ok, mise en session des messages, des différentes modif et redirection vers le formulaire 1
  10. Affichage du formulaire 1 (session remplie, modifier le formulaire en conséquence)
  11. Retour à l'étape 2
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 17h42   #6
Nouveau Membre du Club
 
Inscription : juillet 2011
Messages : 36
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 36
Points : 27
Points : 27
Je ne sais pas si c'est obligatoire de mettre "ce qui était bon dans le formulaire" en session.

Moi je ne le fais pas, j'utilise des formulaires à mémoire (option "selected" pour les radios et checkbox, remettre le texte entre les balises textarea, et "value" pour les input text).
Doonge est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 21h05   #7
Invité de passage
 
Inscription : mars 2008
Messages : 23
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 23
Points : 1
Points : 1
Oui enfin je disais que pour moi c'est élaboré lol. Disons que ça empêche l'utilisateur de cliquer sur envoyer tant qu'il n'a pas remplit les bons champs. Un champs mal rempli est rouge sinon blanc ... Oué je sais c'est nul.
Non mais c'est bon ca marche, j'ai réussi à trouver le fichier de log apache sur l'hébergeur et le message d'erreur était :
PHP Warning : Cannot modify header information ...
En fait je n'avais pas placer l'instruction ob_start au début de mon codage. Je me suis cassé la tete pour pas grand chose .
En tout cas merci pour votre réactivité!
vince-29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h51.


 
 
 
 
Partenaires

Hébergement Web