Bug #16048
risque de double soumission d'une demande
0%
Description
Un jeton est associé aux formulaires pour en éviter le rejeu mais ensuite les choses se passent comme :
- chargement de la session
- du code pour créer le formulaire et en faire le traitement
- vérification de la présence du jeton dans la session lors du has_errors()
Le truc c'est que sur des démarches complexes, le temps de l'étape deux n'est pas négligeable. (c'est une hypothèse concernant un problème arrivé sur quelques demandes à Liège)
Fichiers
Révisions associées
Historique
Mis à jour par Frédéric Péters il y a presque 7 ans
- Fichier 0001-sessions-store-form-tokens-in-external-directory-160.patch 0001-sessions-store-form-tokens-in-external-directory-160.patch ajouté
- Statut changé de Nouveau à En cours
- Patch proposed changé de Non à Oui
L'idée ici c'est d'accompagner les jetons de session d'un fichier sur le disque, pour avoir un élément qui soit instantané, contrairement au cycle chargement/enregistrement de la session.
Ici ça vient en plus de la mécanique existante de session._form_tokens, en alternative ça pourrait juste être le fonctionnement avec les fichiers + un job de nettoyage qui virerait les fichiers vieux de n jours.
Mis à jour par Thomas Noël il y a presque 7 ans
Je pense qu'il manque le bout de patch sur "class Form(...)", non ?
Sinon pépin sur « os.path.join(self.app_dir, 'form-tokens') » car le format form-xxx est déjà pris, en non-SQL, pour stocker les formdata. Et donc si quelqu'un appelle son formulaire "token" on sera bien embêté. Plutôt "form_tokens" ou "formdata-tokens"
Mis à jour par Frédéric Péters il y a presque 7 ans
- Fichier 0001-sessions-store-form-tokens-in-external-directory-160.patch 0001-sessions-store-form-tokens-in-external-directory-160.patch ajouté
Je pense qu'il manque le bout de patch sur "class Form(...)", non ?
Nope. (la modif dans test_fields.py pour ajouter des use_token=False, c'est pour que les tests puissent fonctionner sans avoir de publisher).
Sinon pépin sur « os.path.join(self.app_dir, 'form-tokens') » car le format form-xxx est déjà pris, en non-SQL, pour stocker les formdata. Et donc si quelqu'un appelle son formulaire "token" on sera bien embêté. Plutôt "form_tokens" ou "formdata-tokens"
Excellente remarque.
Mis à jour par Thomas Noël il y a presque 7 ans
Frédéric Péters a écrit :
Je pense qu'il manque le bout de patch sur "class Form(...)", non ?
Nope. (la modif dans test_fields.py pour ajouter des use_token=False, c'est pour que les tests puissent fonctionner sans avoir de publisher).
Arf, je viens de comprendre que create_form_token & co était des override. Sorry.
Donc : ack
(même si j'avoue ne pas avoir tout saisi du problème qui pourrait arriver sans ces fichiers, mais sur ack sur la forme donc)
Mis à jour par Frédéric Péters il y a presque 7 ans
- Statut changé de En cours à Résolu (à déployer)
commit 330e1788a77ad064440489fe9269f36989e30712 Author: Frédéric Péters <fpeters@entrouvert.com> Date: Wed Apr 26 15:14:33 2017 +0200 sessions: store form tokens in external directory (#16048)
Mis à jour par Frédéric Péters il y a plus de 5 ans
- Statut changé de Résolu (à déployer) à Solution déployée
sessions: store form tokens in external directory (#16048)