Cacher les variables contennues dans une url

Soyez le premier à donner votre avis sur cette source.

Snippet vu 28 026 fois - Téléchargée 29 fois

Contenu du snippet

Problème : Il arrive que sur vos liens, vous ayez besoin de spécifier une variable adjointe d'une valeur, afin de faire un traitement dans la page renvoyé par ce dernier.
Le problème, est que ces variables, son visible dans l'url. Pour l'aspect esthétique, ce n'est pas trés beau, mais ce type d'url, peut entrainner des failles dans votre code et des utilisateurs, peuvent adjoindre toute sorte de valeurs, ce qui ne sera pas forcément de votre gout.
Utilitée : Imaginez que vous souhaitez intégrer un questionnaire dans votre site internet, et qu'en fonction des réponses donné, le visiteur, sera dirigé vers tel ou tel page.
Si il suffit de retenir l'url et ses variable, n'importe qui pourra avoir accès à ces différentes pages directement.
Avec cette astuce, le visiteur, ne verra aucune des variables.

Compatibilitée : IE et N6.0

Source / Exemple :


<!--
Explications : 
Nous allons partir du principe, que votre site est basé sur une seule page de base. 
Nous allons donc nommer cette dernière : index.php 
Imaginez maintenant que vous voulez inclure une page au sein de index.php en passant des variables à l'url par l'intermédiaire d'un menu traditionel. 
Le menu classique : 
-->

<a href="?page=accueil.php">Accueil</a><br>
<a href="?page=page1.php">Page 1</a><br>
<a href="?page=page2.php">Page 2</a><br> 
etc... 

<!--
Comme vous pouvez le constater, nous avons ici une variable "page" qui va permettre d'inclure un contenu dans notre page d'origine index.php 
Maintenant, ce qu'il va se passer, c'est que lorsqu'un utilisateur, cliquera sur le premier lien, nous retrouverons ceci dans la barre d'url de notre navigateur favoris :
- http://www.mon_site.com/index.php?page=accueil.php 

Il faudra utiliser (php) la commande $_GET['page'] dans ce cas pour récupérer la variable "page" et sa valeur. 
Nous allons donc utiliser une astuce, afin de cacher cette variable. 
Pour ce, il faut créer un formulaire avec les argument suivant : 
-->

<form action="<? echo $PHP_SELF ?>" method="get" name="Menu1"> 
  <input type="text" name="page" value=""><br> 
  <!-- ICI RECOPIER LE MENU CI-DESSUS --> 
  <a href="?page=accueil.php">Accueil</a><br>
  <a href="?page=page1.php">Page 1</a><br>
  <a href="?page=page2.php">Page 2</a><br> 
</form> 

<!--
Jusque là, vous vous dites, mais quel interêt ? .... (ça vient, ça vient  ) 
A présent, nous allons insérer un petit script qui devra être placé dans le <HEAD></HEAD> de votre page index.php 
Ce script en JavaScript, va permettre d'envoyer une valeur dans le contenu du champ "page" de la boite input. 
-->

<script language="JavaScript" type="text/javascript"> 
function Go(url) 
{ 
  // Donne la valeur de la variable 'url' au champ 'page' 
  document.forms.menu.elements.page.value=url; 
  // Permet l'envoi du formulaire lors de l'exécution de la fonction 
  document.forms.menu.submit(); 
}  
</script> 

<!--
Maintenant, nous allons modifier les liens du menu, afin d'appeler cette fonction. 
Pour des raisons qui vont suivre dans le courant de cette astuce, nous allons totalemnt supprimer les liens existants, et nous appelerons la fonction JavaScript au travers d'un onClick. 
Nous mettrons ici comme variable affectée à la fonction la page de destination. 
-->

<form action="<? echo $PHP_SELF ?>" method="get" name="menu"> 
  <input type="text" name="page" value=""><br> 
  <!-- ICI RECOPIER LE MENU CI-DESSUS --> 
  <a href="#" onClick="Go('accueil.php')">Accueil</a><br> 
  <a href="#" onClick="Go('page1.php')">Page 1</a><br> 
  <a href="#" onClick="Go('page2.php')">Page 2</a><br> 
</form> 

<!--
Maintenant, lors d'un click sur un de ces lien, le champ "page" se verra affecter la valeur contennue. 
Et le formulaire sera envoyé... 
Dans ce cas, nous pourrons récupérer la variable "page" et sa valeur par la commade $_GET['page'], et ainsi pouvoir inclure une page provenant de n'importe qu'elle destination. 
ex : 
-->

<html> 
<head> 
<title>Ma Page</title> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
<script language="JavaScript" type="text/javascript"> 
function Go(url) 
{ 
// Donne la valeur de la variable 'url' au champ 'page' 
document.forms.menu.elements.page.value=url; 
// Permet l'envoi du formulaire lors de l'exécution de la fonction 
document.forms.menu.submit(); 
} 
</script> 
</head> 
<body> 

<form action="<? echo $PHP_SELF ?>" method="get" name="menu"> 
   <input type="text" name="page" value=""><br> 
   <!-- ICI RECOPIER LE MENU CI-DESSUS --> 
   <a href="#" onClick="Go('accueil.php')">Accueil</a><br> 
   <a href="#" onClick="Go('page1.php')">Page 1</a><br> 
   <a href="#" onClick="Go('page2.php')">Page 2</a><br> 
</form> 

<!-- LE RESTE DE VOTRE CODE --> 

<? 
// Insertion des informations pour la page appelée 
// vérification de l'existance de la variable et de son contenu. 
if (isset($_GET['page']) && trim($_GET['page']) != "") 
{ 
   switch($_GET['page']) 
   { 
      case 'accueil.php' : 
         include("mon_dossier/accueil.php" ); 
         break; 
      case 'page1.php' : 
         include("mon_dossier/page1.php"); 
         break; 
      case 'page2.php' : 
         include("mon_dossier/page2.php"); 
         break; 
      default : 
         include("mon_dossier/accueil.php"); 
         break; 
   } 
} 
else 
{ 
   include("mon_dossier/accueil.php"); 
} 
?> 
</body> 
</html> 

<!--
Jusque là, rien d'extraodinaire.... en effet, les variables sont toujours visible dans le l'url.. 
L'astuce commence maintenant. 
Il suffit à présent de modifier les lignes suivantes : 
-->

<form action="<? echo $PHP_SELF ?>" method="get" name="menu"> 
   <input type="text" name="page" value=""> 

<!--
en : 
-->

<form action="<? echo $PHP_SELF ?>" method="post" name="menu"> 
   <input type="hidden" name="page" value=""> 

<!--
et de changer toutes les commandes $_GET['page'] en $_POST['page'] 
soit :
-->
 
if (isset($_POST['page']) && trim($_POST['page']) != "") 
{ 
   switch($_POST['page']) 

<!--
Et voilà ... 
Désormais, les variables et leur valeur, ne seront plus visible dans votre lien.
-->

Conclusion :


04/09/2003 - Rectificatif...
J'ai oublié de mettre le dièse dans les liens .. ce qui empèche le script de marcher correctement ... :|
08/09/2003 - Rectificatif...
Encore un oublie ;(
Retirer le "javascript:" qui du coup ne sert à rien dans l'appel 'onClick'
ET une bourde :
j'avais mis : if (!$GET_[' ... au lieu de : if (isset($_GET[' ...

A voir également

Ajouter un commentaire

Commentaires

jotrash
Messages postés
373
Date d'inscription
mardi 31 décembre 2002
Statut
Membre
Dernière intervention
19 juin 2007
-
bh moi je trouve ca clair et bien expliquer cest rare!!
bon je pense bien sur que ca va pas plaire à un certain utilisateur bien connu mais bon...
McPeter
Messages postés
136
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
18 avril 2013
-
Salut
J'ai reédité la source, car bizarrement le contennu des liesn avait disparu .. :p
> href"?page=accueil.php " etc ..
J'ai oublié de préciser à la fin de al source, qu'il va de soit qu'avec cette astuce, on peut passer d'autres valeurs de la même manière, en ajoutant autant de champ <input type="hidden".. que l'on souhaite.
@++
P.S: jotrash ;o)
eax
Messages postés
728
Date d'inscription
jeudi 20 juin 2002
Statut
Membre
Dernière intervention
7 novembre 2007
-
sympa ton code, fallait y penser en plus tu détailles bien toutes les étapes
odyseus
Messages postés
14
Date d'inscription
mardi 18 février 2003
Statut
Membre
Dernière intervention
27 mars 2003
-
On peut encore faire mieux , moi j'adjoint une variable en plus qui a pour valeur l'heure-minute-seconde poiur que la page appellé ne reste pas dans le cache exemple:
url2=url+"temp="+document.menu.heure.value;
document.forms.menu.elements.page.value=url2;
ou le champ heure est invisible et recoit l'heure en seconde via une function d'heure comme suit


<script language=javascript>
var ddt1, delay;
function debuteTemps1() {
var hhmmss = "", mins, sec;
delay = 1000;

adate = new Date();
hhmmss += adate.getHours();
mins = adate.getMinutes();
sec = adate.getSeconds();
if (mins < 10) hhmmss += "" + mins;
else hhmmss += "_" + mins;
hhmmss = "" + hhmmss;
if (sec < 10) hhmmss += "" + sec;
else hhmmss += "_" + sec;
hhmmss = "" + hhmmss;
document.menu.heure.value = hhmmss;

ddt1 = setTimeout("debuteTemps1(delay)",delay);
}


bon dev
McPeter
Messages postés
136
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
18 avril 2013
-
eu .. c'ast pas grave odyseus, mais ça valait la peine de me mettre 5/10 ?
j'ai aps fait ce code dans un but de protectionde site ou d'empecher le cache ou d'empêcher une lecture hors connexion ...
c'est juste une astuce pour éviter l'affichage des variables contenue dans une URL .. donc je vois aps trés bien qu'est ce qu'un champ time peut ajouter à l'astuce ???

@++

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.