Anomalie #6904
ferméLe Set-Cookie pour supprimer le cookie ne spécifie pas de path
100%
Description
Le client Gatling ne peut pas se logger correctement sur Dynacase.
- Le client soumet user/password pour se logger :
POST /test/authent.php?sole=A&app=AUTHENT&action=CHECKAUTH HTTP/1.1 [...]
- Le serveur répond avec la suppression de dcpsession (dcpsession=deleted) et donne le nouveau dcpsession (dcpsession=aebb6d68de55fb8fbdb8fd25d7257054)
HTTP/1.1 302 Found [...] Set-Cookie: dcpsession=f8d82a9d180a554354c18d09f173c972; expires=Thu, 01-Dec-2016 11:52:08 GMT; path=/test/; httponly Set-Cookie: dcpsession=f8d82a9d180a554354c18d09f173c972; expires=Thu, 01-Dec-2016 11:52:08 GMT; path=/test/; httponly Set-Cookie: dcpsession=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; httponly Set-Cookie: dcpsession=aebb6d68de55fb8fbdb8fd25d7257054; expires=Thu, 01-Dec-2016 11:52:08 GMT; path=/test/; httponly [...] Location: /test/ [...]
- Le client suit le redirect et charge "/test/" en soumettant deux valeurs pour le cookie "dcpsession" : "deleted" et la valeur qu'on s'attend à avoir "aebb6d68de55fb8fbdb8fd25d7257054" :
GET /test/ HTTP/1.1 [...] Cookie: dcpsession=deleted; dcpsession=aebb6d68de55fb8fbdb8fd25d7257054 [...]
- Comme le cookie est pris dans la variable $_COOKIE qui ne permet pas d'avoir des entrées avec la même clef, le code PHP se retrouve avec la première valeur qui vaut "deleted", il refuse donc l'accès et redirige le client vers la page de login.
Le problème semble être que lors de la suppression du cookie "dcpsession", le path n'est pas spécifié et le client stocke alors deux valeurs pour dcpsession : une en global qui vaut "deleted", et une précise pour le path "/test/" qui vaut la valeur attendu "aebb6d68de55fb8fbdb8fd25d7257054".
Au niveau HTTP il semble qu'il ne soit pas interdit pour un client (ou un serveur) d'avoir deux cookies avec le même nom...
J'ai testé deux solutions de contournement :
- Si la valeur est du cookie est "deleted", alors je parse _SERVER['HTTP_COOKIE'] et extraire le premier dcpsession formé de 32 hex-chars.
- Sinon on peut "corriger" Class.Session.php pour faire la deletion avec un path
Set-Cookie: dcpsession=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/test/; httponly
^^^^^^^^^^^^
Dans les deux cas, le client Gatling peut alors se connecter correctement.
Références :
- http://stackoverflow.com/questions/4056306/how-to-handle-multiple-cookies-with-the-same-name#answer-24214538
- https://tools.ietf.org/html/rfc6265
Mis à jour par Jérôme Augé il y a plus de 9 ans
dynacase-core 3.2.20 ne semble pas avoir ce problème puisque Gatling peut s'y connecter sans problèmes.
Mis à jour par Marc Claverie il y a plus de 8 ans
- Assigné à mis à Jérôme Augé
- Version cible mis à 3.2.23
- Solution proposée mis à jour (diff)
Mis à jour par Éric Brison il y a plus de 8 ans
- Statut changé de Nouveau à Intégré
Appliqué par commit internal-platfrom:commit:2e51af6a0bd250bfa2a93ec2d26f765a194b9b20.