2012-02-12 4 views
1

Si j'écris un système de billetterie, où le client sélectionne le ticket et que je veux le verrouiller pendant 3 minutes (comme le ticketmaster) jusqu'à ce qu'il termine sa commande ou que le temps soit écoulé, comment pourrais-je faire ? Je veux éviter qu'un client abandonne son crash de session/application et se retrouve avec le ticket verrouillé dans la base de données pour toujours. J'utilise nHibernate pour mon ORM et mon C#.Panier Timeout

Répondre

5

Il suffit d'avoir une table distincte qui contient toutes les réservations actuelles. Par exemple:

**Reservations** 
UserID 
TicketID 
ExpiryDate 

Cela ne dépendra donc pas des sessions. Vous n'avez même pas besoin de supprimer les enregistrements expirés, lorsqu'un nouveau client interroge un ticket trouver toutes les places disponibles là où elles n'existent pas dans la table des réservations où expirydate> now.

Évitez les systèmes plus complexes d'événements temporisés et des choses comme ça, restez simple.

0

Avoir un service d'expiration de ticket qui déverrouille périodiquement les verrous de tickets expirés. Enregistrer l'heure d'expiration et le ticket (éventuellement avec un identifiant de session). La commande pourrait l'enlever lorsqu'elle n'est plus nécessaire ou en cas de panne elle sera automatiquement déverrouillée.

0

Si vous pouvez identifier chaque ticket, vous pouvez affecter des informations de verrouillage à ce ticket avec des données sur l'utilisateur, la commande, etc. et bien sûr - l'horodatage qui contient le temps d'expiration du verrou.

Si un autre utilisateur souhaite sélectionner le ticket, il vous suffit de vérifier cet horodatage pour voir si le verrou a expiré.

+0

C'est aussi une bonne solution. – user1205641