Project

General

Profile

Development #71455

Passer les form_tokens dans la base de données

Added by Pierre Ducroquet 3 months ago. Updated about 1 month ago.

Status:
Solution déployée
Priority:
Normal
Target version:
-
Start date:
18 November 2022
Due date:
% Done:

0%

Estimated time:
Patch proposed:
Yes
Planning:
No

Description

Même logique que #71441, sauf que c'est vraiment eux qui provoquent l'iowait apparemment (j'étais dans l'idée que les sessions étaient dans la base de données et pas sur disque, et donc que clean_session ne pouvait pas faire les IOs)
On a actuellement dans la base une table représentant les sessions, mais les form_tokens sont stockés sur disque.
Étant donné qu'un form_tokens est nécessairement associé à une session, on a deux options pour les représenter en base:
- soit ajouter une colonne form_tokens varchar[] à sessions (et comme on cherche toujours un form_tokens par rapport à une session, on n'aurait même pas à l'indexer)
- soit créer une table à part pour ça, de type session_id, form_token_id, timestamp

Je note que le code de Quixote limite à 10 le nombre de form_tokens par session, rendant l'idée d'une colonne varchar[] plus légère et plus intéressante.


Files


Related issues

Related to w.c.s. - Development #71441: Passer les nonces dans la base de donnéesSolution déployée18 November 2022

Actions

Associated revisions

Revision c41f4a13 (diff)
Added by Frédéric Péters about 1 month ago

misc: use database to store form tokens (#71455)

History

#1

Updated by Pierre Ducroquet 3 months ago

#3

Updated by Pierre Ducroquet 3 months ago

En creusant l'historique, je comprends que l'implémentation actuelle avec des fichiers sert à forcer une forme d'atomicité. Entre la vérification et l'enregistrement de la session, il pouvait s'écouler trop de temps, rendant trop probable un doublon.
Du coup la seule réponse à ça serait d'avoir une table à part, dans laquelle on ferait une insertion immédiatement.

#4

Updated by Frédéric Péters 2 months ago

  • Assignee changed from Pierre Ducroquet to Frédéric Péters

Je m'occuperai de ça.

#5

Updated by Frédéric Péters 2 months ago

Je m'occuperai de ça.

Et transient_data fournit déjà une table qui assure un lien entre un jeton et une session, je l'utilise donc, au plus simple. (je ne reprends pas la limite au nombre de form_tokens par session)

#6

Updated by Pierre Ducroquet about 2 months ago

Est-ce-que le même patch ne devrait pas aussi gérer la "migration" de l'existant (importer en base les données si requis, et surtout supprimer les anciens dossiers) ?

#7

Updated by Frédéric Péters about 2 months ago

Non, on est sur de l'info vraiment temporaire, au pire le lendemain matin quelqu'un qui n'aurait pas fermé sa session aura un message lui disant de cliquer à nouveau sur le bouton. (position adoptée sur des précédentes migrations de ce type, et pareil pour les fichiers résidus)

#8

Updated by Frédéric Péters about 1 month ago

Patch actualisé pour y ajouter une migration qui fait la suppression des fichiers (rebasée sur la migration ajoutée par #72096).

#9

Updated by Pierre Ducroquet about 1 month ago

  • Status changed from Solution proposée to Solution validée
#10

Updated by Frédéric Péters about 1 month ago

  • Status changed from Solution validée to Résolu (à déployer)

Rebasé pour augmenter le numéro de migration,

commit c41f4a1303b2a8e4bc39553b4c198348b32b32fd
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Thu Dec 8 20:32:52 2022 +0100

    misc: use database to store form tokens (#71455)
#11

Updated by Transition automatique about 1 month ago

  • Status changed from Résolu (à déployer) to Solution déployée

Also available in: Atom PDF