Pour gérer l'état des sessions à l'aide de la fonction de réécriture des URL, évitez d'insérer des liens HTML vers votre application Web. Cette restriction est indispensable en raison d'une incompatibilité entre le codage URL et les fichiers HTML standard. Pour gérer les états à l'aide de la fonction de réécriture des URL, chaque page demandée par l'utilisateur pendant une session doit posséder un code identifiable par l'interpréteur Java. Si votre application Web et les parties de votre site accessibles à l'utilisateur au cours d'une session comportent des fichiers HTML, convertissez-les en fichiers JSP. Les conséquences se répercutent sur le programme d'écriture des applications parce que contrairement à la gestion de sessions avec des cookies, la gestion de sessions à l'aide de la fonction de réécriture des URL requiert l'utilisation du codage URL pour chaque attribut HREF sur les balises de type <A> par les différents modèles JSP de l'application. La session sera perdue si un ou plusieurs modèles JSP d'une application n'appelle(nt) pas les méthodes encodeURL(String url) ou encode RedirectURL(String url).
La fonction de réécriture des URL permet d'ajouter l'ID de session à tous les liens renvoyés au navigateur ou redirigés. Par exemple, le lien suivant dans une page Web :
<a href="magasin/catalogue">
est réécrit de la façon suivante :
<a href="magasin/catalogue;$jsessionid$DA32242SSGE2">
Lorsque l'utilisateur clique sur ce lien, le nouveau format de l'URL est intégré à la requête du client et envoyé au serveur. Le moteur de servlet identifie ;$jsessionid$DA32242SSGE2 comme l'ID de la session et l'enregistre afin d'obtenir l'objet HttpSession approprié pour cet utilisateur.
L'exemple suivant indique la façon dont le code Java doit être imbriqué dans un fichier JSP :
<%
response.encodeURL ("/magasin/catalogue");
%>
Pour réécrire les URL renvoyées au navigateur, invoquez la méthode encodeURL() dans votre modèle JSP avant d'envoyer l'URL au flux en sortie. Par exemple, si un modèle JSP n'utilise pas la fonction de réécriture des URL, mais possède le format suivant :
out.println("<a href=\"/magasin/catalogue\">catalogue</a>")"
remplacez-le par :
out.println("<a href=\"");
out.println(response.encodeURL ("/magasin/catalogue"));
out.println("\">catalogue</a>");
Pour réécrire les URL redirigées, invoquez la méthode encodeRedirctURL(). Par exemple, si votre modèle JSP possède le format suivant :
response.sendRedirect (response.encodeRedirectURL ("http://mon_hôte/magasin/catalogue"));
Les méthodes encodeURL() et encodeRedirectURL() sont rattachées à l'objet HttpServletResponse. Dans les deux cas, ces appels s'assurent que la fonction de réécriture des URL est configurée avant de coder l'URL. Sinon, l'URL d'origine est renvoyée.
Pour rédiger les formulaires à soumettre, invoquez la commande response.encodeURL("Connexion"); de la balise ACTION du modèle de formulaire. Par exemple,
String strLoginPost = response.encodeURL("Connexion");
<FORM NAME="Connexion" METHOD="post" ACTION= <%= strLoginPost %> >
...
</FORM>
La page initiale (généralement la page d'accueil) doit être exempte de cadres. Si vous souhaitez utiliser des cadres dans votre magasin, une page non-cadre avec un lien vers le magasin peut servir de page initiale de celui-ci. En revanche, si le magasin utilise des cadres et si un client essaie d'accéder aux pages sans passer d'abord par la page initiale, il risque de perdre sa session. Cet incident peut également survenir si le client utilise le bouton Précédent (seulement si des cadres sont présents) pour revenir à la page initiale et régénérer celle-ci. La régénération de la page initiale entraîne la création d'un nouvel ID de session. Pour éviter ce type de perte de session, un lien de renvoi à la page initiale est nécessaire comme solution de remplacement du bouton Précédent.
![]() |