OVH Cloud OVH Cloud

Pourquoi cela fonctionne!

16 réponses
Avatar
l'atelier Ho
Bonjour à tous

Au début de mon script index.php, je met un valeur dans un
cookie.

Example:
if (empty($setlang)){
$setlang = "fre";
}
setcookie("afflang",$setlang,time()+3600);

puis ouverture des frames....

Sans que je fasse quelque choses, la valeur $afflang est
connue dans tous les scripts appelés depuis les frames.

Je ne passe pas de variables en paramètres, mais j'aimerais
comprendre pourquoi cela fonctionne?

Merci d'avance pour tous renseignements.

Otto

10 réponses

1 2
Avatar
RAKOTOMALALA Renaud
[../..]
setcookie("afflang",$setlang,time()+3600);

puis ouverture des frames....

Sans que je fasse quelque choses, la valeur $afflang est
connue dans tous les scripts appelés depuis les frames.

Je ne passe pas de variables en paramètres, mais j'aimerais
comprendre pourquoi cela fonctionne?


La variable registrer_global est probablement activé ce qui fait que le
contenu des cookies du sites, des variables passées avec les methodes
GET et POST sont directement accessible dans les scripts sans manipulation.

Ce qui peut paraitre interessant au début et en fait un piège lorsque la
programmation se complexifie et je te suggère de mettre ce paramètre sur
"off" dans ton php.ini afin de développer proprement.

Cordialement,
--
RAKOTOMALALA RENAUD
W-CONSULTING http://www.w-consulting.fr
Librenet Network http://www.librenet.net
InsideNetworks http://www.insidenetworks.net

Avatar
l'atelier Ho
Bonjour Renaud

Un grand merci pour ta réponse. Malheureusement je ne peux surement pas agir
sur ce paramètre vu que c'est le provideur qui gère cela.

La variable registrer_global est probablement activé ce qui fait que le
contenu des cookies du sites, des variables passées avec les methodes
GET et POST sont directement accessible dans les scripts sans manipulation.

Fichier index.php

If (empty($setlang)){
$setlang = "fre";
}
setcookie("afflang",$setlang,time()+3600);



En fait je n'ai pas de passage GET ou POST!
Le cookie est déclaré au début de mon script index.php qui charge 3 frames.
Et dans les 3 frames ma variable $afflang est disponible.
Ce que je trouve bien.
Est-ce que le principe des sessions serait mieux ?


Ce qui peut paraitre interessant au début et en fait un piège lorsque la
programmation se complexifie et je te suggère de mettre ce paramètre sur
"off" dans ton php.ini afin de développer proprement.



Meilleures salutations

Otto


Avatar
blob
CORRECTION :

Un grand merci pour ta réponse. Malheureusement je ne peux surement pas
agir sur ce paramètre vu que c'est le provideur qui gère cela.


Votre hébergeur ne vous donne pas accès au php.ini mais vous pouvez
peut-être modifier ce paramètre via un fichier .htaccess. Il suffit de créer
un fichier avec votre éditeur de texte préféré, d'y écrire la ligne
qui suit :

php_flag register_globals off

et de sauver ce fichier à la racine de votre site en le nommant :

.htaccess


Blob

Avatar
RAKOTOMALALA Renaud
Bonjour Renaud

Un grand merci pour ta réponse. Malheureusement je ne peux surement pas agir
sur ce paramètre vu que c'est le provideur qui gère cela.


La variable registrer_global est probablement activé ce qui fait que le
contenu des cookies du sites, des variables passées avec les methodes
GET et POST sont directement accessible dans les scripts sans manipulation.



Fichier index.php

If (empty($setlang)){
$setlang = "fre";
}
setcookie("afflang",$setlang,time()+3600);




En fait je n'ai pas de passage GET ou POST!
Le cookie est déclaré au début de mon script index.php qui charge 3 frames.
Et dans les 3 frames ma variable $afflang est disponible.
Ce que je trouve bien.
Est-ce que le principe des sessions serait mieux ?


En fait j'ai du mal m'exprimer, les variables issu de la methode POST,
GET et des COOKIES sont directements accessibles ....

L'utilisation des sessions est préférable c'est sur, mais ça ne repond
pas à ta question :)

--
RAKOTOMALALA RENAUD
W-CONSULTING http://www.w-consulting.fr
Librenet Network http://www.librenet.net
InsideNetworks http://www.insidenetworks.net



Avatar
l'atelier Ho
Bonjour Renaud

En fait j'ai du mal m'exprimer, les variables issu de la methode POST,
GET et des COOKIES sont directements accessibles ....

Merci.


J'ai quand même encore une petite question.

Lorsque je rentre dans mon script, la variable $afflang à une valeur.
Celle que j'ai enregistré dans mon cookie (script index.php).
Index.php
if (empty($setlang)){
$setlang = "fre";
}
setcookie("afflang",$setlang,time()+3600);


Maintenant j'ai un formulaire qui s'apelle lui même.

Script : affarticle.php

echo $afflang
// la première fois c'est OK, mais pas lorsque je le rappelle!
..
<Form onSubmit="return CheckForm(this)" method=post action="<?= $_SERVER
['PHP_SELF'] ?>" >
..
..
<input type="submit" name¯flang value="fre">
<input type="submit" name¯flang value="ger">
<input type="submit" name=mode value="Enregistrer">
<input type="submit" name=mode value="Nouveau">
<input type="submit" name=mode value="Effacer">
<input type=hidden name=last_id value="<?= $id ?>">
..

En fait lorsque je clique sur fre ou ger la variable afflang devrait
changer non ?
Et bien celle ci-reste à "fre" ou "ger" selon l'appel du script
précédent.

Meilleures salutations

Otto

Avatar
newdb
l'atelier Ho wrote:
Lorsque je rentre dans mon script, la variable $afflang à une valeur.
Celle que j'ai enregistré dans mon cookie (script index.php).
Index.php
if (empty($setlang)){
$setlang = "fre";
}
setcookie("afflang",$setlang,time()+3600);
Maintenant j'ai un formulaire qui s'apelle lui même.
Script : affarticle.php
echo $afflang
// la première fois c'est OK, mais pas lorsque je le rappelle!
<Form onSubmit="return CheckForm(this)" method=post action="<?= $_SERVER
['PHP_SELF'] ?>" >
<input type="submit" name¯flang value="fre">
<input type="submit" name¯flang value="ger">
<input type="submit" name=mode value="Enregistrer">
En fait lorsque je clique sur fre ou ger la variable afflang devrait
changer non ?


oui. et elle change, ta variable afflang.

Et bien celle ci-reste à "fre" ou "ger" selon l'appel du script
précédent.


non. ce qui reste à 'fre' c'est la variable $setlang !

il faudrait plutôt :
<input type="submit" name=setlang value="fre">
<input type="submit" name=setlang value="ger">

là, ta variable est bien nommée et sera récupérée

--
@@@@@
E -00 comme on est very beaux dis !
' `) /
|_ =="

Avatar
_nop_nop_quinton_
La variable registrer_global est probablement activé ce qui fait que le
contenu des cookies du sites, des variables passées avec les methodes
GET et POST sont directement accessible dans les scripts sans manipulation.


a mon avis cela n'a rien a voir.

petit rapel, sauf erreur de ma part cookies et session sont un peu la meme
chose.
Les sessions sont une spécialisation des cookies.

voici les 2 API des fonctions associées :

bool setcookie ( string name [, string value [, int expire [, string path
[, string domain [, int secure]]]]])
void session_set_cookie_params ( int lifetime [, string path [, string
domain [, bool secure]]])

pour ces 2 fonctions on voit que le cookie c'est a dire la clé
d'identification est rataché
a une url + chemin.

il est donc tout a fait normal d'avoir des variables automatiquement
positionnées
quand on positionne un cooki sur un répertoire ou une url.

essaie de faire varier les parametres URL et PATH, ou encore le chemin
d'acces des
frames, tu verras que les cookies ne sont plus disponibles.

Un cookie c'est une variable stocké dans le navigateur et transmise a
chaque requete
sur un site moyennant url+path,

une session c'est simplement une clé (stockée sous forme de cookie ou en
url) transmise
par le meme navigateur ; et php se charge de faire la correspondance entre
la clé
et un environnement de travail contenant des variables temporaires dites
variables
de sessions.

Cookie :
navigateur: serveur web + php
nom1:valeur (pour url+path) -> $nom=$valeur

Session

navigateur: serveur web
cle:valeur(pour url+path) -> chargement du contexte (fonction
de cle=valeur)
-> on obtient un
tableau $SESSION[...]



W-CONSULTING http://www.w-consulting.fr


moi aussi je vais faire du consulting ...

bonne journée.


--
Posté via http://www.webatou.net/
Usenet dans votre navigateur !
Complaints-To:

Avatar
l'atelier Ho
Bonjour

il faudrait plutôt :
<input type="submit" name=setlang value="fre">
<input type="submit" name=setlang value="ger">

là, ta variable est bien nommée et sera récupérée

J'ai essayé mais ma varible $afflang garde la même valeur

que lors du premier passage dans le script!

J'ai aussi essayé l'idée suivante:
Réajouté dans le script appelé le setcookie.
Ex.
Setcookie("afflang",$setlang);
echo $afflang;

Mais dans ce cas, $afflang est vide.

Encore un grand merci pour ta patience

Otto

Avatar
newdb
l'atelier Ho wrote:
Bonjour
J'ai aussi essayé l'idée suivante:
Réajouté dans le script appelé le setcookie.
Setcookie("afflang",$setlang);
echo $afflang;
Mais dans ce cas, $afflang est vide.


hummm.
essaie :

<?php
//le cookie s'appelle $afflang, sa valeur s'appelle $setlang
if (!($_COOKIE['afflang'])) { //si cookie nommé afflang existe pas
$setlang = "fre"; //on affecte valeur 'fre' à var $setlang
setcookie("afflang",$setlang); //on écrit cookie avec var $setlang
} elseif ($_POST['setlang']) { //si formulaire a envoyé valeur
setcookie("afflang",$_POST['setlang']); //cookie $setlang récupérée
}
?>

<html>
<head>
</head>
<body>
<form method=post action="<?= $_SERVER ['PHP_SELF'] ?>" >
<input type="submit" name=setlang value="fre"><br>
<input type="submit" name=setlang value="ger"><br>
</form>
<br>
Mon cookie : <?= $_COOKIE['afflang'] ?>
</body>
</html>

Attention :
"Les cookies ne seront accessibles qu'au chargement de la prochaine
page, ou au rechargement de la page courante." (in manuel php)

tu es obligé de recharger ta page pour 'voir' la modification puisque le
cookie est hébergé chez toi et que le php s'exécute sur le serveur.
pour un changement 'immédiat' => javascript !

attention, aussi que les cookies ne sont pas toujours acceptés par les
surfeurs...

--
@@@@@
E -00 trop de sucre tue la vague !
' `) /
|_ =="

Avatar
RAKOTOMALALA Renaud

La variable registrer_global est probablement activé ce qui fait que
le contenu des cookies du sites, des variables passées avec les
methodes GET et POST sont directement accessible dans les scripts sans
manipulation.



a mon avis cela n'a rien a voir.

petit rapel, sauf erreur de ma part cookies et session sont un peu la
meme chose.
Les sessions sont une spécialisation des cookies.



Oui il y a erreur. Un hash de session peut se trouver dans un cookie,
mais une variable de session est un stokage des variables du coté
serveur (via un backend de son choix) et non du coté client (donc via
des cookies).


voici les 2 API des fonctions associées :

bool setcookie ( string name [, string value [, int expire [, string
path [, string domain [, int secure]]]]])
void session_set_cookie_params ( int lifetime [, string path [, string
domain [, bool secure]]])

pour ces 2 fonctions on voit que le cookie c'est a dire la clé
d'identification est rataché
a une url + chemin.
il est donc tout a fait normal d'avoir des variables automatiquement
positionnées
quand on positionne un cooki sur un répertoire ou une url.



La je pense que vous mélanger pas mal de chose, si vous souahitez avoir
un débat de fond cela ne me pose pas de problème particulier, cependant
avez vous lu les specifications du langage PHP (du moins recement) et la
signification de la variable register_global.

Car pour rappel la variable au sens PHP n'est pas disponible directement
à partir de son nom.

exemple:

<form action="X" method="post">
<input type=text name=foo valueºr>
</form>

Si X est un script PHP et que le register_global est sur off, en d'autre
terme puisque vous semblez vouloir jouer les équilibristes en analysant
les "appels" de fonction et non les fonctions elle même, qu'il n'y a pas
de translation automatique entre les variables de tableau

GET[cle] => valeur
POST[cle] => valeur
COOKIE[cle] => valeur
FILE[cle] => valeur
SESSION[cle] => valeur

anciennement contenu dans les tableaux $HTTP_*_VARS

en ${cle} => valeur;

en reprenant l'exemple POST[foor] = bar se transforme en $foo = bar;
et de même pour toutes les variables

Jusqu'à une certaine epoque cette translation etait automatique mais
cela induisait différents problème de securité, d'ou la desactivation de
plus en plus systematique de cette fonction via le passage de la
variable regiter_global à off

essaie de faire varier les parametres URL et PATH, ou encore le chemin
d'acces des
frames, tu verras que les cookies ne sont plus disponibles.


Oui c'est ce que l'on appel la sécurité appliqué aux cookies pour eviter
une lecture via un site tiers, mais rien avoir avec la question
d'origine comme rpecedement d'ailleurs.


Un cookie c'est une variable stocké dans le navigateur et transmise a
chaque requete
sur un site moyennant url+path,

[../..]



Puisque vous semblez connaitre le principe de fonctionnement il est
indeniable que vous ne savez pas comprendre la problématique du post
original.

Alors si vous souhaitiez sortir votre connaissance, je vous invite à le
faire dans le sujet et non à coté


W-CONSULTING http://www.w-consulting.fr



moi aussi je vais faire du consulting ...



Pour l'avenir de vos potentiels clients, pitié epargné les autres
consultants qui seraient suceptibles de devoirs passer après vous pour
corriger les problèmes :)

Cordialement,
--
RAKOTOMALALA RENAUD
W-CONSULTING http://www.w-consulting.fr
Librenet Network http://www.librenet.net
InsideNetworks http://www.insidenetworks.net


1 2