Projet

Général

Profil

Development #71455

Passer les form_tokens dans la base de données

Ajouté par Pierre Ducroquet il y a plus d'un an. Mis à jour il y a plus d'un an.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
18 novembre 2022
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

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.


Fichiers


Demandes liées

Lié à w.c.s. - Development #71441: Passer les nonces dans la base de donnéesFermé18 novembre 2022

Actions

Révisions associées

Révision c41f4a13 (diff)
Ajouté par Frédéric Péters il y a plus d'un an

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

Historique

#1

Mis à jour par Pierre Ducroquet il y a plus d'un an

#3

Mis à jour par Pierre Ducroquet il y a plus d'un an

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

Mis à jour par Frédéric Péters il y a plus d'un an

  • Assigné à changé de Pierre Ducroquet à Frédéric Péters

Je m'occuperai de ça.

#5

Mis à jour par Frédéric Péters il y a plus d'un an

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

Mis à jour par Pierre Ducroquet il y a plus d'un an

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

Mis à jour par Frédéric Péters il y a plus d'un an

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

Mis à jour par Frédéric Péters il y a plus d'un an

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

#9

Mis à jour par Pierre Ducroquet il y a plus d'un an

  • Statut changé de Solution proposée à Solution validée
#10

Mis à jour par Frédéric Péters il y a plus d'un an

  • Statut changé de Solution validée à 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

Mis à jour par Transition automatique il y a plus d'un an

  • Statut changé de Résolu (à déployer) à Solution déployée
#12

Mis à jour par Transition automatique il y a environ un an

Automatic expiration

Formats disponibles : Atom PDF