Projet

Général

Profil

Bug #16048

risque de double soumission d'une demande

Ajouté par Frédéric Péters il y a presque 7 ans. Mis à jour il y a plus de 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
-
Version cible:
-
Début:
26 avril 2017
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

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

Révision 330e1788 (diff)
Ajouté par Frédéric Péters il y a presque 7 ans

sessions: store form tokens in external directory (#16048)

Historique

#1

Mis à jour par Frédéric Péters il y a presque 7 ans

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.

#2

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"

#3

Mis à jour par Frédéric Péters il y a presque 7 ans

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.

#4

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)

#5

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)
#6

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

Formats disponibles : Atom PDF