Bonjour à tous,

ce n'est pas vraiment un problème pour stocker des tokens en BDD, c'est plus pour avoir votre avis sur la question.

Voici le topo :
Je propose aux utilisateurs d'un site d'envoyer un mail de demande de soutien (par rapport à leur post) à 100 utilisateurs inscrits en BDD. Dans ce mail, il y a un lien vers une action permettant d'ajouter un point de soutien au post mentionné plus haut.

Afin d'éviter que des petits malins soutiennent plusieurs fois le même post en cliquant sur le lien de nombreuses fois, j'ai eu idée d'inclure un token dans ce lien ainsi qu'une date de validité du token. Jusque là, pas de problème particuliers.

Ce que je me demande, c'est comment stocker ces tokens en BDD ? Je m'explique. Si le site commence à prendre de l'ampleur, je vais me retrouver avec une table assez énorme si je dois stocker 100 tokens différents par post. En admettant que je commence à avoir 100 posts, vous voyez la taille de la base...
De plus, je ne m'interdit pas d'augmenter le nombre d'utilisateurs qui pourraient recevoir un mail...
Je pensais donc supprimer le token de la BDD à chaque "soutien" apporté par un utilisateur.

D'après vous, est-ce judicieux de supprimer les tokens au fur et à mesure qu'un utilisateur clique sur le lien ? Devrais-je plutôt jouer seulement avec la date de validité du token et ne pas les supprimer, au risque d'avoir une table de plus en plus grosse ?

Qu'en est-il des performances entre ces deux solutions ? Existe-t-il une autre solution au problème ?

Merci d'avance pour vos éclairages ;)
Romain

2 réponses


A mon avis, tu devrais, dans la table des utilisareurs, ajouter 2 collones :
soutien_token | Souenu
-------------------------------------------------
Le token au format :
{token}/////{post_id}

Les posts soutenus sous cette forme :
{id},{id},{id},{id},{id},{id},{id},{id},{id},{id}

Pour répupérer le token :

// ($bdd_token = le token de la base)
$_token = explode($bdd_token, '/////');
$token = $_token[0]; // Token
$post_id = $_token[1]; // L'identifiant du post

Pour récupérer les posts déjà soutenu

// $bdd_posts_soutenus = les posts soutenus de la base de données
$posts = explode($bdd_posts_soutenus, ',');
// Lecture :
foreach($posts as $post) {
    $id = $post;
}
Romano83
Auteur

Merci pour vos réponses.
Je vais prendre la solution de hocktor qui me paraît plus simple à mettre en place et qui ressemble plus à ce que j'avais déjà en tête avant de poster la question ;)