C’est quoi, un JSESSIONID ?

JSESSIONID est un terme que vous rencontrez fréquemment lorsque vous travaillez dans le monde Web Java, mais il est difficile de trouver une bonne explication de ce que c’est sur Internet. J’essaierai d’élucider ce mystère 🙂

Vocabulaire

Présentons un vocabulaire de base pour rendre l’article plus facile :

  • HTTP : le protocole (principal) qui gère Internet. Lorsque vous demandez un site Web, celui-ci est généralement renvoyé via HTTP.
  • Client : une application qui demande une ressource (par exemple un site Web) à un serveur via HTTP. Votre navigateur Web est un client, par exemple.
  • Serveur : une application qui attend les demandes des clients et y répond en mettant à disposition un site Internet.
  • Serveur d’applications : une application sur laquelle le serveur s’exécute. Dans le monde Java, le serveur d’applications le plus fréquemment utilisé est Tomcat, mais il en existe plusieurs autres comme Glassfish, Wildfly, Websphere, etc.

Comment marche une session

HTTP est « stateless« . Cela signifie que lorsqu’un client demande un site Web à un serveur, chaque requête est indépendante. Cela crée quelques défis : par exemple, disons qu’un serveur dispose d’une page privée (accessible uniquement aux utilisateurs connectés) et d’une page pour connecter les utilisateurs. Les utilisateurs peuvent se connecter en utilisant la requête HTTP appropriée, mais comment la requête HTTP suivante fonctionne-t-elle ? celui qui récupère la page privée, sait-il qu’une requête HTTP précédente a authentifié l’utilisateur, puisqu’il n’y a aucune relation entre les deux requêtes envoyées ?

Stateless calls

Pour contourner ce problème, il existe plusieurs solutions. L’un d’eux consiste à utiliser les cookies. Un cookie est un fichier qui contient un long morceau de texte que le serveur envoie au client lorsque le client se connecte. Après cela, le client envoie ce fichier à chaque requête adressée au serveur ; le serveur vérifie que le cookie contient du texte connu, et si c’est le cas, il sait que l’utilisateur est autorisé à accéder à la page ou à la ressource privée.

Tracking state with a cookie

Il est important de savoir que cela se produit presque automatiquement. Les développeurs écrivent des clients qui s’exécutent sur des navigateurs et des serveurs qui s’exécutent dans des conteneurs d’applications ; dans les navigateurs et conteneurs d’applications modernes, le processus d’envoi de cookies est automatique et invisible pour les développeurs. Tout ce que le développeur doit faire est de configurer la sécurité du serveur pour dire « Je souhaite que ces pages soient protégées par des cookies », et les clients et serveurs d’applications feront le reste. Cela permet aux développeurs de sécuriser facilement les applications, mais il est difficile pour les développeurs débutants de comprendre comment tout cela fonctionne et de diagnostiquer quand cela ne fonctionne pas.

Qu’est-ce qu’un JSESSIONID ?

Dans le monde Java, JSESSIONID est le nom de ce cookie envoyé entre un serveur d’applications et un client. Ce n’est pas seulement une convention, c’est toujours le cas : la spécification du servlet Java indique que « le nom du cookie de suivi de session DOIT être JSESSIONID ».

Réécriture d’URL

Parfois, le client est une simple application qui ne prend pas en charge l’utilisation de cookies (il ne peut peut-être pas accéder au système de fichiers de l’appareil et ne peut donc pas enregistrer le cookie). Dans ces cas, le JSESSIONID peut être ajouté dans le cadre de l’URI de la demande, en tant que tel :

https://christopher-neve.com/private-resource;jsessionid=AB9F3

Veuillez noter que ce n’est pas ainsi que VOUS devez envoyer le JSESSIONID à votre application. Le processus de réécriture d’URL se déroule en coulisse entre le client et le serveur et ne doit pas être utilisé comme solution de contournement au cas où vous ne comprendriez pas comment les deux communiquent. La sécurité est une préoccupation extrêmement sensible dans la conception et le développement d’une application. La meilleure chose que vous puissiez faire est d’utiliser vos outils, langages et frameworks comme ils sont censés le faire.

Diagnostic des problèmes JSESSIONID

Je reçois des réponses 401 non authentifiées de mon serveur même si je suis connecté. Comment puis-je m’assurer que le JSESSIONID est transféré ?

Si votre client est un navigateur, cliquez avec le bouton droit sur la page Web et cliquez sur « Inspecter », puis sélectionnez l’onglet « Stockage » dans vos outils de développement. Sous « Cookies », si votre navigateur a reçu le JSESSIONID, alors il devrait apparaître ici.

Inspecting JSESSIONID cookie in a browser

Vous pouvez également vous assurer qu’il est envoyé avec votre demande. Cliquez sur l’onglet « Réseau », puis cliquez sur la requête qui renvoie un 401. Sous « En-têtes de requête », vous devriez trouver un en-tête portant le nom « Cookie » et une valeur commençant par « JSESSIONID= ».

Ensuring an HTTP request sends JSESSIONID cookie

Sources et lectures complémentaires

Java Servlet Specification 2.4, section SRV.7.1.1

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *