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

6 réponses

1 2
Avatar
Marc
RAKOTOMALALA Renaud wrote:

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).


j'ai sans doute pas été assez précis. Je n'ai jamais énoncé que les
cookies et les sessions etaient strictement identiques. J'ai aussi
parlé de contexte d'execution dans les sessions et pas pour les cookies.
J'ai meme annoncé la notion de clé pour les sessions.

enfin restons-en la.

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.


la question d'origine ? il n'y avait pas vraiment de question mais
plutot un etonnement sur le présence de variables transmises d'une
pages php vers d'autres. Je n'ai fait que d'expliquer la raison
de cette transmission. La principale raison de cette transmission
ce n'est pas la variable register_global, mais c'est du simplement
a l'utilisation des cookies.

Avatar
Marc
RAKOTOMALALA Renaud wrote:


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 :)



les sessions sont en général utilisées pour :
- enregistrer en grand nombre de variables temporaires
- ces variables ne sont pas visibles de l'extérieurs
(point positif pour la securité)
- ces variables disparaissent a la fin de la session (login)
- elles ont donc une durée de vie limitée
- mais il faut veiller a ce quelles soient pas trop nombreuses
pour eviter de trop charger le serveur Web.
- elles sont généralement stockée dans le repertoire /tmp
ce qui donne une idée de leur durée de vie. Il existe d'autres
solutions de stockage.

les variables coockies :
- sont enregistrés sur le client (navigateur),
- sont aussi lisibles et modifiables par la personnes qui
utilise sont navigateur -> pas tres sécurisé.
- elles peuvent etre considéré comme un badge (cle) qui facilite
l'acces a certains sites.
- certains cookies peuvent avoir une durée de vie tres longue
et permettre de reconnaitre un utilisateur a chaque visite,
- d'autres cookies n'ont comme durée de vie que la durée de vie
du navigateur : ils s'effacent quand on ferme le naigateur.
c'est sur ce principe que sont basés les cookies pour les sessions.
- l'enregistrement et la gestion de la clé etant a la charge
du client, c'est propice a avoir de bonne performance sur le
serveur qui n'a plus qu'a lire la valeur et l'exploiter :
souvent ce sera un select * where id=$cookie


Avatar
l'atelier Ho
Bonjour Marc
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.

Juste. Si je met cette variable à off, j'ai d'autres problèmes!


Je te remercie pour ton aide ainsi qu'à Denisb. Mais je tourne un peu en rond
avec mon problème qui va surement me paraitre simple lorsque j'aurai trouvé la
solution!

Voici ou j'en suis.
J'ai le cookie suivant dans mon fichier index.php:
if (empty($setlang)){
$setlang = "fre";
}
setcookie("afflang",$setlang);

Je définie une variable langue, que j'aimerais avoir à disposition dans tous
mes scripts. Cela fonctionne parfaitement.
Mais à un certain moment dans un mode administration de mon projet, j'aimerais
pouvoir changer de langue sans avoir à repasser par la page index.

Je rappelle ma page affarticle.php en mode PHP_SELF.

Voici le haut et le bas du script.

echo "DEBUG";
echo "<br>afflang : ";
echo $afflang;
echo "<br>setlang POST : ";
echo $_POST['setlang'];
echo "<br>afflang POST: ";
echo $_COOKIE['afflang'];

// Variante proposé par denisb
//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
}


Début du formulaire:
<form onSubmit="return CheckForm(this)" method=post action="<?= $_SERVER
['PHP_SELF'] ?>" >

Fin du formulaire:
<input type="submit" name=setlang value="fre">
<input type="submit" name=setlang 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 ?>">
</center>
</form>

le site ou je bricole...
http://www.helt.ch/minishop/admin/index.php
choisier le premier article "ARTICLE FRE" de la liste et voir les variable
débug en cliquetant sur ger et fre.
Je suis débutant alors ne casser pas tout!

En fait je commence à croire que ma variable ne se laisse pas changer vu
qu'elle est générée par le cookie!

Merci d'avance pour tous renseignements et bon weekend

Otto


Avatar
newdb
l'atelier Ho wrote:
le site ou je bricole...
http://www.helt.ch/minishop/admin/index.php
choisier le premier article "ARTICLE FRE" de la liste et voir les variable
débug en cliquetant sur ger et fre.
Je suis débutant alors ne casser pas tout!
En fait je commence à croire que ma variable ne se laisse pas changer vu
qu'elle est générée par le cookie!


j'ai vu que tu posais aussi ta question sur alt.comp.lang.php...

tu es apparemment face au problème du raffraichissement de ta page.
ainsi ton cookie a bien vu sa valeur changer, mais ta page ne le reflète
pas encore : chronologie du traitement php serveur vers client.
pour que ta variable soit utilisable 'de suite' sans retourner vers le
serveur et en revenir tu ne peux qu'utiliser javascript qui, lui,
s'exécute côté client.

essaie ça (attention il faut recoller les lignes coupées) :

<?php
//le cookie s'appelle 'afflang', sa valeur est contenue dans $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>
<script type="text/javascript">
function LireCookie(name) {
nbCookies = document.cookie.length;
cookieName = name + "=";
cookieNameLongueur = cookieName.length;
if (document.cookie.indexOf(cookieName) > -1) {
FinDuCookie document.cookie.substring(document.cookie.indexOf(cookieName) +
cookieNameLongueur);
cookievalue FinDuCookie.substring(0,((FinDuCookie.indexOf(";") > -1) ?
FinDuCookie.indexOf(";") : nbCookies));
return unescape(cookievalue);
}
}
</script>
</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>
<script type="text/javascript">
document.write ("nouveau contenu du cookie lisible en direct
gr&acirc;ce &agrave; javascript : " + (LireCookie ("afflang") ?
LireCookie ("afflang") : "vide... probl&egrave;me !"));
</script>
</body>
</html>


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

Avatar
l'atelier Ho
Bonjour Denis

C'est vraiment sympa que tu prennes le temps de m'aider. Je suis à
mes début en PHP et malgré ce que j'ai lu mon livre je me sens un
peu nul..

J'ai vu que tu posais aussi ta question sur alt.comp.lang.php...

Bin, je suis les deux forums php que je trouve bien au niveau

contenu et sympatie, et c'est un peu l'occaion de tester mon
anglais...

OK je vais tester ton script ce soir. Bon dimanche

Otto

Avatar
Savut
"Marc" wrote in message
news:409c8556$0$17903$
RAKOTOMALALA Renaud wrote:

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).


j'ai sans doute pas été assez précis. Je n'ai jamais énoncé que les
cookies et les sessions etaient strictement identiques. J'ai aussi
parlé de contexte d'execution dans les sessions et pas pour les cookies.
J'ai meme annoncé la notion de clé pour les sessions.

enfin restons-en la.

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.


la question d'origine ? il n'y avait pas vraiment de question mais
plutot un etonnement sur le présence de variables transmises d'une
pages php vers d'autres. Je n'ai fait que d'expliquer la raison
de cette transmission. La principale raison de cette transmission
ce n'est pas la variable register_global, mais c'est du simplement
a l'utilisation des cookies.


Correction, la reponse est plutot a cause de l'utilisation du cookie et avec
l'option register_global de PHP a On. Sans register_global, il n'y aurait
pas cette comportement.

Savut


1 2