2011-12-24 4 views
0

Je construis un site de billetterie électronique pour les bus. Je suis confronté à un problème ici: Lorsque l'utilisateur réserve des billets avec numéro de siège, j'ai mis à jour la base de données avec leurs numéros de siège. Maintenant, je veux savoir s'il ferme la fenêtre et choisit de ne pas réserver. Je devrais expirer sa session après un intervalle de tempsRéservation de billets temporaires

Répondre

4

Je garderais ses choix dans la session et ne commettrait à la base de données qu'une fois qu'il a confirmé la réservation.

+0

Ouais ... bonne idée. Merci Gigi – AssamGuy

0

Bien que la solution de @Gigi soit raisonnable, elle n'est pas complète.

Vous devriez en quelque sorte réserver les places qu'un visiteur a choisies, sinon un autre visiteur, visitant en même temps, pourrait réserver les mêmes places.

Vous pouvez définir une heure, par exemple dix minutes, pour laquelle les places restent réservées au visiteur qui les a réservées en premier. Pendant ce temps, ce visiteur peut compléter la réservation (c'est-à-dire entrer les données de paiement et de livraison), auquel cas vous mettez à jour les champs appropriés pour indiquer que les sièges qu'ils représentent ne doivent plus être libérés puisqu'ils "appartiennent" à ce client. Vous pouvez exécuter puis exécuter un travail de suppression de temps en temps (par exemple sur chaque page, ou avant chaque recherche de places disponibles, ou peut-être par le biais d'un travail cron) qui libère des sièges réservés plus de dix fois. il y a quelques minutes mais dont les réservations n'ont pas été complétées.

1

C'est un problème qui surgit souvent avec les sites de billetterie et de vente au détail. Le dilemme souvent rencontré par les utilisateurs est qu'ils achètent un article (en stock faible) ou réservent un siège particulier pour constater que la ressource n'est plus disponible parce qu'un autre utilisateur a cliqué sur "Confirmer" avant de le faire ...

Avec Afin de garder une trace des ressources en cours d'achat, il est recommandé de mettre en place une table de base de données temporaire 'temp_transaction' que votre code peut consulter pour déterminer si un utilisateur est en train de réserver, disons, un siège particulier. .

Une fois le paiement, le contrôle et la validation effectués sur les données temporaires, une validation de la table "transaction" principale peut être effectuée et la table "ressources" (sièges) mise à jour avec des données définitives.

Cette approche permet une meilleure comptabilisation des transactions concurrentes ainsi qu'un audit ponctuel de l'activité de l'utilisateur et/ou de l'état des ressources.

+0

la suggestion d'avoir une période de grâce par @CodeCaster est une bonne idée, car elle permet aux utilisateurs d'avoir la priorité sur les ressources pendant qu'ils réservent sans immobiliser les ressources indéfiniment (et donc perdre des ventes). Cela pourrait être réalisé avec une implémentation de table temporaire sans avoir besoin de cron. – venzen

Questions connexes