Bonjour,

Je me trouve confronté à un problème délicat, lié aux variables de session dans une servlet.
Je travaille sur une servlet de paiement qui est appelée (méthode doPost()) deux fois :
- Une fois pour redirigér vers la JSP qui contient le forumaire de paiement
- Une deuxième fois pour procésser le formulaire de paiement lorsque l'utilisateur a cliqué sur le bouton "payer"

Mon problème est que, une fois le paiement effectué et l'utilisateur redirigé vers l'écran de résultat (paiement accepté/refusé), à ce moment s'il clique sur le bouton "back" du browser web, il doit être redirigé vers une page d'erreur, et non pas pouvoir ré-éffectuer un paiement.

Dans la méthode doPost() de ma servlet, je fais donc ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
request.getSession().getAttribute("transactionId")
Si le résultat est null, alors c'est que nous passons pour la première fois dans le doPost(), à ce moment là je définis cette variable de session "transactionId" (identifiant de transaction généré aléatoirement depuis une page commerçant appelante), via session.setAttribute(). Dans la suite du traitement, avant de rediriger vers l'écran de résultat, je fais un session.invalidate().

A ce moment là, j'observe deux scénarios différent selon l'environnement ou j'éffectue mes tests (environnement de dev/environnement de recette) :
Environnement de dev : Une fois arrivé sur la page de résultat du paiement, j'appuie sur le bouton précédent du navigateur, puis le navigateur indique qu'il faut rafraîchir pour recharger la page, je clique donc sur le bouton refresh, et à ce moment là, la variable de session précédemment affectée est toujours éxistante et a gardée sa valeur (est-ce lié au cache du navigateur ? Car pour tant la session a été invalidée avec session.invalidate()). Ceci me permet de rejetter l'utilisateur en vérifiant que la variable stockée en session est existante et identique à celle des paramètres de la requête.

Environnement de recette : Sur l'environnement de recette, qui est identique à celui ce production, le comportement est différent et m'empêche de trouver un moyen de rejetter l'utilisateur. En effet, lorsqu'il clique sur "précédent" et rafraîchît le formulaire, à ce moment là la variable de session qui avait était positionnée est nulle, en fait il n'y a plus aucune variable de session.

Précisions supplémentaires :
- Le site commerçant appelant la servlet pour afficher la JSP avec le formulaire de paiement est différent dans les deux environnements, dans le cas du dev c'est un site commerçant de dev et dans le cas de la recette, c'est le site commerçant de demo du client.
- La webapp de dev tourne sur un tomcat 8.5, celle de recette sur un tomcat 7.0

Auriez-vous une explication du pourquoi de ces deux comportements différents en fonction de l'environnement (dev/recette) ?

Merci d'avance, je butte sur ce problème depuis plusieurs jours et ne pouvant pas être en debug sur l'environnement de recette (le seul moyen de tester et de republier le war sous tomcat), j'ai du mal à trouver une solution.

Cordialement