2011-12-07 6 views
5

Ho un'applicazione di carrello con articoli unici con qty 1 - Devo svuotare la quantità di azioni quando un utente ne inserisce uno nel carrello per evitare che qualcun altro lo acquisti. Il problema è che se abbandonano il carrello senza comprare ho bisogno di rimettere a posto l'articolo.PHP esegue uno script quando scade una sessione

C'è un modo per rifornire lo stock quando scade la sessione del carrello? ad esempio, esegui uno script per sostituire lo stock.

+0

Sembra un po 'strano farlo in quel modo. Potrei, per esempio, aggiungere tutti i tuoi articoli al mio carrello. Se la tua sessione normale è di 20 minuti non avrai azione per 20 minuti. Perché non basta rimuovere il brodo quando qualcuno effettua il check out? Potresti anche avere un assegno quando fanno clic sul check-out per assicurarsi che sia ancora disponibile. –

+0

Non li toglierei dal magazzino quando li metto nel carrello ma solo quando sono effettivamente acquistati. – Gumbo

+0

Grazie, sono d'accordo ma non è una mia decisione! –

risposta

4

È possibile utilizzare session_set_save_handler per creare una classe di gestione sessione personalizzata. Quando si esegue questa operazione, è possibile decidere altre azioni che devono essere eseguite quando il garbage collector viene chiamato o durante la sessione di distruzione. Se decidi di lavorare con il garbage collector, assicurati di conoscere anche i valori per session.gc_divisor e session.gc_probability e di capire anche cosa fanno (imposta la probabilità che il garbage collector venga eseguito).

+0

Questo è quello che stiamo andando per grazie –

+0

@jimsmith Sono contento che aiuti – mishu

0

Creare una tabella di database per tenere traccia dell'attività di sessione, ad esempio sessions. In esso, inserire almeno i campi session_id e un campo DATETIME o TIME denominato last_activity.

Se non si dispone di così già, creare anche un tavolo carts che detiene il contenuto del carrello (come product_id e quantity) e dispone di un collegamento al session_id. Poi, ci sono 2 scenari:

  1. l'utente termina l'ordine, solo "pulire" le righe della tabella carts appartenenza alla propria sessione.
  2. L'utente abbandona il carrello, chiama un cronjob che controlla se il valore dello last_activity è superiore a quello che si desidera (ad esempio, più di un'ora fa). Fai in modo che lo script riattivi la tua offerta con la quantità che era nel carrello.

Nota che è necessario aggiornare il campo last_activity nel bootstrap/loader (un meccanismo che viene attivato su ogni pagina caricata).

1

Per evitare la necessità di cron jobs; mantenerlo semplice:

  1. Un utente prende pone un oggetto nel suo/la sua paniere
  2. timestamp per "immissione oggetto nel carrello" è memorizzato nel database, e un timestamp timeout viene memorizzato anche. Per esempio (time() + (60*20))
  3. utente chiude pagina web
  4. Su ogni pageload fate una semplice mysql-query per verificare se timeout-timestamp sono più piccoli il timestamp corrente. Se la query restituisce un risultato, cancella dal carrello e rimetti nello slot.

(Questo richiede di aggiornare una sorta di "ultima attività" nel database troppo)

Dovrebbe essere piuttosto semplice.