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
Storie di Agarthi: Ricorda, è il nome a scegliere il personaggio...
shirayuki ha recensito Age of Crystals
Dark Genesis → Ascendi al cielo in Dark Genesis! Raduna potenti semidei, costruisci il tuo impero volante e scontrati in battaglie divine!
Il gestore di Storie di Agarthi ha risposto alla recensione di paoltab
World of Warship: Battaglie Asimmetriche nel 14.5
nereya ha aperto una nuova discussione: Nuova Frontiera
World of Warship → MMO gratuito con frenetiche battaglie navali ambientate nel ventesimo secolo. Salpa con la tua nave ed affronta i nemici!
New Wizarding World: Un nuovo Medimago
Sea of Conquest: Incontra Demona Rood! 🔥
anacronista ha recensito Storie di Agarthi
Nyx Insight - Project S.E.T.: Setting Refresh Time ✨
World of Tanks → Lanciati in epiche battaglie spalla a spalla con altri giocatori. Conquista la supremazia nel mondo dei Carri Armati!
mhorras1988 ha recensito Fengard
prosperus ha recensito Exclusive Villa GdR
visanders ha aperto una nuova discussione: Aiuto ricerca Gioco
kooei ha recensito Il Paiolo Magico
War Thunder → Aviazione, veicoli corazzati e flotte militari della seconda guerra mondiale. Parteciperai a tutte le principali battaglie!
Messaggistica - Le App di messaggistica istantanea più utilizzate in Italia
SiteCreationAvilion - Scarica SiteCreationAvilion e crea facilmente un sito web per la tua gilda o il tuo clan!
Creare Avatar - Presentazione di 7 App gratuite sul Play Store per creare avatar manga o divertenti!
Giochi di Calcio - Lista completa dei giochi di ruolo online nel mondo del calcio
Into the Wild - Intervista al play by chat post apocalittico ambientato in Italia: Into The Wild!
Giochi Scuola - Lista completa dei giochi di ruolo online ambientati nel mondo della scuola o dell'università
GdR by Forum su Altervista - Lista dei giochi di ruolo play by forum sul circuito Altervista
Giochi Final Fantasy - Lista completa dei giochi di ruolo online ambientati nel mondo di Final Fantasy