Généralement le token est récupéré par l’appel à la classe JHTML :
echo JHtml::_('form.token');
Il est généralement testé au retour du formulaire dans la méthode adéquate du contrôleur par l'instruction:
JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN'));
Mais on peut en avoir besoin en dehors d'un formulaire, dans un lien par exemple
En regardant la fonction token de /librairies/cmd/html/form.php ou remarque que le jeton de session est calculé par la méthode abstraite
JSession::getFormToken()
et quen fait il sert de nom dans la variable de formulaire, d'où le code html généré :
echo '<input type="hidden" name="' . JSession::getFormToken() . '" value="1" attributes="" />';
Pour pouvoir tester qu'un lien est bien lancé par la session courante, on ajoutera donc si l'url est :
.'&'.JSession::getFormToken().'=1' à l'url à lancer
Exemple :
$HTML = '<a href="'.JRoute::_('index.php?option=com_moncomposant&task=import.getfileweb&filename='.$nom_fichier.'&'.JSession::getFormToken().'=1'). '">'.JText::sprintf('COM_GMONCOMPOSANT_FILE',$nom_fichier) .'</a>';
On pourra alors vérifier le token dans la méthode getfileweb du contrôleur import.php comme si les donnée provenaient d'un formulaire html par la méthode checkToken de la classe abstraite JSession.
Il faudra juste alors lui indiquer en paramètre que le token est passé en mode 'get' et non dans la formulaire html (méthode 'post').
JSession::checkToken('get') or jexit(JText::_('JINVALID_TOKEN'));