Sto costruendo un sito di prenotazione biglietti online. In questo sto facendo le seguenti cose: L'utente cerca il bus con i loro numeri di posto. Il database viene aggiornato con i numeri di posto con temp_seat_book = 'Y'
. Se prenota il biglietto pagando i soldi, il suo stato sarà aggiornato a final_ticket_book = 'Y'
. Ora voglio cancellare il campo di cui temp_seat_book = 'Y'
ma final_ticket_book = 'N'
. Per questo ho bisogno di cancellare il session_ids che è più di 10 minuti vecchi e final_ticket_book = 'N'
. Quindi, come posso implementare il lavoro in background?Annulla sessione dopo un po 'di tempo
risposta
Invece di fare una ricerca per i file (che coinvolge più di I/O), ecc, Che cosa è un cookie di sessione: Session Cookie
Un modo migliore è quello di memorizzare un timestamp della 'attività più recente' nella variabile $ _SESSION.
E aggiornamento dei dati di sessione su ogni richiesta (incluse le chiamate periodiche automatiche ajax, se presenti).
Diciamo che si desidera disinserire la sessione dopo 10 minuti,
if (isset($_SESSION['most_recent_activity']) &&
(time() - $_SESSION['most_recent_activity'] > 600)) {
//600 seconds = 10 minutes
session_destroy();
session_unset();
}
$_SESSION['most_recent_activity'] = time(); // the start of the session.
Per evitare attacchi come Session fixation: (Session Fixation è un attacco che permette a un utente malintenzionato di dirottare una sessione utente valido) mantenere rigenerante l'id della sessione dice periodicamente per 5 minuti (suggerirei di mantenere un po 'più il tempo di rigenerazione e la sessione scadono un po'). Un elenco di attacchi più elaborato: attack list.
if (!isset($_SESSION['CREATED'])) {
$_SESSION['CREATED'] = time();
}
else if (time() - $_SESSION['CREATED'] > 600) {
session_regenerate_id(true);
$_SESSION['CREATED'] = time();
}
Inoltre, assicurarsi session.gc-maxlifetime
è impostato al massimo scade il tempo che si desidera utilizzare. È possibile farlo
ini_set('session.gc-maxlifetime', 600)
O Situato direttamente nel tuo php.ini.
e anche
session.cookie_lifetime specifica la durata del cookie in secondi che viene inviato al browser.
Tuttavia, la distruzione della sessione deve essere eseguita con attenzione sul lato server e non sul lato client. L'impostazione di session.cookie_lifetime su 0 renderebbe il comportamento del cookie della sessione come un cookie di sessione, nel senso che un cookie di sessione è valido solo fino alla chiusura del browser.
Anche se questo metodo è un po 'tedioso, è più elegante.
Ah, ho trovato il collegamento che avevo letto molto tempo fa! : How do I expire a PHP session after 30 minutes?
Le sessioni PHP standard sono archiviate in file. Si potrebbe implementare un semplice script di shell di trovare qualsiasi file di sessione, che non è stato toccato in 10 minuti:
find /path/to/session/dir/* -mmin -10
grep può essere utilizzato per trovare i file di sessione che hanno un valore di final_ticket_book = 'N' memorizzato in loro :
grep -l 's:17:"final_ticket_book";s:1:"N";'
(i flag -l hanno grep che sputa i nomi dei file che corrispondono).
Combinando i due ti dà:
find /path/to/session/dir -mmin -10|xargs grep -l 's:17:"final_ticket_book";s:1:"N";'|xargs rm -f
- 1. Gli utenti connessi si disconnettono dopo un po 'di tempo
- 2. Chrome: onaudioprocess smette di chiamare dopo un po 'di tempo
- 3. SetWindowsHook smette di funzionare dopo un po 'di tempo
- 4. Connectify interrompe la connessione Internet dopo un po 'di tempo
- 5. NSTimer si ferma in background dopo un po 'di tempo
- 6. Come eseguire una funzione dopo un po 'di tempo javascript
- 7. Dopo un po 'di tempo espellere dal server Openshift
- 8. L'interfaccia utente Vaadin si scollega dopo un po 'di tempo
- 9. Tempo un po 'di ciclo python
- 10. Annulla sessione in SilverStripe
- 11. RelayCommand smette di funzionare dopo un po '
- 12. C'è un modo per ignorare un pulsante senza UIalertView dopo un po 'di tempo?
- 13. L'invio di un sacco di mail utilizzando SmtpClient (C#) prende molto tempo dopo un po '
- 14. WebSocket Session si chiude dopo non aver ricevuto input per un po 'di tempo
- 15. come fare un arresto di setInterval dopo un po 'di tempo o dopo un numero di azioni?
- 16. C'è un modo per eliminare automaticamente una alertview dopo un po 'di tempo?
- 17. iPhone: tutte le animazioni hanno smesso di funzionare dopo un po 'di tempo
- 18. Eclipse si blocca dopo un po 'di tempo con errore di java
- 19. L'evento di riconnessione Mongoose non viene attivato dopo un po 'di tempo
- 20. L'attività Apache Storm Bolt non riceve messaggi dopo un po 'di tempo
- 21. I registri WSGI/Flask/Python si fermano dopo un po 'di tempo
- 22. HTTPWebRequest & Dopo un po 'di tempo, 400 (Richiesta non valida) inizia
- 23. Il listener ViewTreeObserver non viene chiamato dopo un po 'di tempo
- 24. Esiste un po 'di tempo per ogni ciclo in Java?
- 25. Informare il programma Ruby per attendere un po 'di tempo
- 26. Il widget Android smette di funzionare dopo un po '?
- 27. Android Studio: non può modificare i file dopo un po '
- 28. Vim annulla: annulla le modifiche dopo la scrittura del file
- 29. Cancella variabile di sessione dopo l'uso
- 30. La funzione AWS Lambda continua per un po 'dopo context.fail
basta avere un timestamp e controllarlo? – footy
non sarebbe più facile un singolo campo db di "seat_status" con uno dei 3 stati. –
may Hai trovato la tua risposta qui http://stackoverflow.com/questions/520237/how-do-i-expire-a-php-session-after-30-minutes –