Query per cancellazione utente da online postato il 04/07/2011 15:05:31 nel forum programmazione, gdrcd, open source, hosting
Sto usando il codice di Traimo ([url=https://www.gdr-online.com/opensource_gpl.asp]questo[/url]).
Al momento del login, quando viene aperta una sessione php, viene creata una tupla nella tabella ONLINE.
Tale tabella tiene traccia di chi è online, da quanto tempo e in quale "luogo del gioco" (ossia pagina) si trova.
Questo permette di poter mostrare a tutti gli utenti chi è online e dov'è per permettere di raggiungere le persone nel luogo in cui ruolano.
Tale tupla viene cancellata quando l'utente effettua il logout, ma nel caso in cui esca dal gioco senza fare logout, rimane inserito nella tabella sebbene si chiuda la sessione.
Mi servirebbe sapere quando e dove devo mettere la query che rimuove la tupla se voglio che venga rimossa quando viene chiusa la pagina principale del gioco. (da quello che sono riuscita a trovare servirebbe Javascript perchè la chiusura della pagina avviene lato client, ma non ho scoperto nulla di più preciso..).
Se l'utente non ha effettuato un logout regolare e resta nella tabella ONLINE, al suo successivo tentativo di login riceve un messaggio di errore e non gli è possibile loggarsi. Rimane quindi online agli occhi degli altri player che potrebbero cercare di contattarlo inutilmente.
Pagine → 1
04/07/2011 18:22:07
Questa è probabilmente la questione che da più grattacapi quando si crea un sistema per il tracciamento degli utenti online XD
Credo che il sistema più comunemente accettato per risolvere questo problema sia quello di stabilire un tempo di timeout, cioè se l'utente non fa nessun'azione sul sito per più di....metti 10 minuti...allora il sito lo considera offline.
Come implementare questo sistema sul gioco? Personalmente io faccio in modo che per ogni pagina visitata da qualsiasi utente venga sempre richiamata la query che fa la pulizia della tabella dei presenti.
"DELETE FROM Presenti WHERE DATE_ADD(UltimoRefresh, INTERVAL 10 MINUTE)<NOW()"
(ho inventato i nomi della tabella e del campo)
Oppure potresti aggiungere la condizione dei 10 minuti solo allo script di login. Dipende se vuoi riuscire a fare un tracciamento preciso per la lista dei presenti (metodo sopra) o solamente per poter fare login (questo metodo)
In questo modo sei abbastanza sicuro che se per caso l'utente non ha fatto logout, al suo successivo rientro non si ritrovi chiuso fuori dalla porta.
Per rendere più preciso il tracciamento ci vuole javascript: con delle chiamate AJAX fai in modo che il client contatti il server ogni x secondi, così puoi abbassare anche il tempo di timeout per le query. Quando l'ho implementato io ho fatto in modo che però i "ping" al server avvengano solo se l'utente sta effettivamente muovendo il mouse o digitando qualcosa, così evitiamo troppe richieste al server se l'utente non sta facendo niente.
05/07/2011 13:37:43
Ti ringrazio. Inizio col provare usando il timeout che mi sembra un bel po' più semplice.
Quello che mi chiedevo è se non ho capito male come funziona.
La query viene lanciata quando qualcuno richiede la pagina se non erro..e quindi lo script all'interno della stessa viene eseguito sul server.
Nel caso in cui sia online 1 sola persona, questa chiuda il browser e vuole riloggarsi senza che nel frattempo si sia loggato qualcuno, funziona ugualmente? Ossia riesce questa persona ad effettuare il login?
05/07/2011 16:23:31
Brava XD hai trovato l'unico problema di questo sistema.
No quell'ultima persona non ci riesce. Rimane fuori per 10 minuti.
Per superare questo problema io in genere modifico la pagina in cui c'è il modulo per fare login:
proprio all'inizio della pagina metto un controllo, se è impostata una sessione ed è valida, allora non visualizzare la pagina di login ma salta direttamente dentro al GDR saltando il login, perchè di fatto l'ha già fatto.
Una cosa di questo tipo
Discussione seguita da
Pagine → 1
Rispondi alla Discussione Aggiungi ai Preferiti Inoltra Discussione Forum Programmazione, GDRCD, Open Source, Hosting Elenco Forum
Hero Wars: ⚔️ Il torneo di Titan Power è iniziato!
Enlisted: Operation "Market Garden"
World of Tanks → Lanciati in epiche battaglie spalla a spalla con altri giocatori. Conquista la supremazia nel mondo dei Carri Armati!
I dati del generatore di rank sono stati aggiornati!
Black Sails Chronicles: ON - Mastro Corvino
AlterEgo: Alza il Boccale, se no finisce male! (Quest)
RAID Shadow Legends: Evento "Febbre di Caduta"
Crossout → Tuffati nel mondo di Crossout, il gioco MMO d'azione post apocalittico! Costruisci le tue speciali macchine da combattimento!
alexstrass ha aperto un annuncio di ricerca: Castelnere ricerca Tester
Entropia Universe: Note sulla versione di Entropia Universe 19.0.0
Il gestore di Naruto x Boruto GDR - New Rebirth ha risposto alla recensione di ilterrorista
Il gestore di Naruto x Boruto GDR - New Rebirth ha risposto alla recensione di aura666
Crash Bandicoot Zone → Caos, libertà e risate: nel GDR ambientato nell’universo di Crash Bandicoot, ogni storia è possibile… e nulla è troppo folle!
Tesi di Laurea → I giochi di ruolo come strumento pedagogico
Ex Gratia GDR: Elezioni in vista per Taiyang
La Tana del Ladro: Orrore nelle Campagne
glittr ha recensito Apocalypse Requiem: Detroit
The Coven → Negli scorci di luce delle paludi della Louisiana fioriscono nuove ombre. Estend e la Congrega ti aspettano per vivere emozionanti avventure!
Harry Potter Magic World - Intervista al gestore del play by forum Harry Potter Magic World GDR! Alohomora!
Province Italiane - Scopriamo assieme la provenienza dei visitatori del portale per capire dove vivono i giocatori italiani
Play Therapy - L’infermiere e il potere terapeutico del gioco nei bimbi ospedalizzati
Signore del Male - Le 100 cose che farò se mai diventerò un Signore del Male!
Melrose Abbey - Intervista alla gestione del play by chat storico Melrose Abbey
eXtremelot - ExtremeLot lascia il web dopo vent’anni.. :-(
Hellswhere XII - Intervista ai creatori del play by chat urban fantasy Hellswhere XII!