Newsgroup: it.comp.lang.javascript
Titolo: Logout da una chat...logout.php in popup

Ciao ragazzi,
credo che sia un problema affrontato almeno un migliaio di volte, però io 
sono ancora qua con lo stesso problema. Dunque, ho realizzato una chat in 
php...l'utente fa login, chatta.
Ci sono due modi per uscire: c'è un link "Disconnetti" sulla pagina che 
funziona senza problemi. Se invece l'utente chiude con la 'X' della 
finestra, ho gestito l'evento onUnload per aprire un popup.
Il problema è il solito: se uno ha installato l'SP2 di WindowsXP il popup 
non si apre, la pagina logout.php non viene aperta, il flag dell'utente non 
viene messo a 0 e quindi sembra ancora nella chat.
voi come fareste a risolvere?
c'è un modo? adesso googlo un po', però onestamente ho molti dubbi su come 
fare 'sta cosa....
grazie per qualsiasi consiglio e dritta, sul serio.....sono in panne....
ciao!!!
-- 
Alletun
"Se ti va di spassartela adesso
Prendi il Vettore oggi stesso."
Terre Desolate - Stephen King 

 viene messo a 0 e quindi sembra ancora nella chat.
Non ho installato il SP2 di XP e non posso testarlo (mi hanno detto che crea
un po' di casini e sto aspettando che si stabilizzi un pň)...
Perň se funziona come un antipopup normale dovrebbe esserci anche l'opzione
per disabilitare il filtro popup per un determinato sito.
Se cosě fosse una soluzione sarebbe creare la finestra della chat come
popup, in modo da "obbligare" gli utenti a disabilitare il filtro per il tuo
sito (magari esplicitandolo in quella pagina con una cosa del genere: "la
chat dovrebbe aprirsi automaticamente altrimenti disabilitare il filtro
antipopup").
Un'altra soluzione sarebbe quella di creare un comando come /esci che ti
faccia uscire regolarmente dalla chat (con funzionamento analogo al link che
hai fatto), e una funzione in javascript che faccia scrivere e inviare un
testo o un comando (per esempio se l'utente clicca su un link "saluta
tutti", si attiva la funzione "scrivi('ciao a tutti'), che gli fa scrivere
la frase tra virgolette senza che la digiti). Infine scrivere l'evento
onbeforeunload cosě:
onbeforeunload= myfunc
function myfunc() {
scrivi('/esci');
alert('a presto');
}
l'alert serve per fermare l'unload (finché non premi ok) e dare il tempo
necessario al comando /esci di essere eseguito e caricato. E' poco
elegante... ma a mali estremi...
Molto comunque dipende da come l'hai strutturata la chat.
E su questo punto.... potrei chiederti come l'hai fatta? :)
devi aggiornare la pagina continuamente? hai usato un Database o IRC? frames
nascosti? hai usato i socket di php?
Perché vorrei farla anch'io, ma solo php&mysql&javascript.. ma ho paura che
con php&mysql ci sia un enorme lavoro del server...
fammi sapere se hai voglia :)
ciao,
Luca(riello)

 fammi sapere se hai voglia :)
farò qualche prova con quello che mi hai detto!
allora, in poche parole: è scritta in php, si appoggia su un db mysql e, 
certo, ho bisogno di fare il refresh della pagina ogni x secondi per vedere 
gli ultimi messaggi postati. Ho la pagina viewmess.php che appunto fa il 
refresh, poi ho la listusers.php che visualizza l'elenco degli utenti 
connessi in quel momento.
In teoria dovrebbe fare un refresh automatico anche questa, ma ho tirato in 
piedi un bel meccanismo in php dentro la viewmess.php che si accorge su un 
utente si logga e quindi il l'aggiorna della listusers.php avviene solo 
quando necessario.
poi ho usato un frame nascosto per il submit del form del messaggio.
comunque non sono molto convinto di usare l'evento onUnload, perchè si 
scatena se l'utente preme F5 (IE) o Ctrl+R (Firefox), e in questo caso 
avviene il logout e non va mica bene.....
per adesso grazie, ciao!!!


 con php&mysql ci sia un enorme lavoro del server...
Secondo me una cosa come una chat non dovrebbe essere sviluppata tramite
queste tecnologie.
Cmq i metodi da utilizzare possono essere parecchi, anche se non esenti da
difetti.
Sarebbe piu' che altro interessante, come esercizio, svilupparla per i
browser recenti facendo uso di XmlHttpRequest.
-- 
.ZER0//sign
"When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)

 avviene il logout e non va mica bene.....
Dipende, puo' anche andar bene. Se consideri la chat un applicativo, e'
corretto che il "reload" sia come un "riavvio" del programma.
Del resto, non e' l'utente a dover fare il refresh per visualizzare i nuovi
messaggi, lo fa la chat automaticamente.
Basterebbe che tu scrivessi da qualche parte all'utente che il
reload/refresh della chat comporta il riavvio della stessa.
Ovviamente devi gestire la cosa, in modo da riproporre la maschera di login
nella popup della chat.


 queste tecnologie.
nonostante l'abbia fatto, sono d'accordo con te!
:-)))
good coding!!!


 nella popup della chat.
uhm, sì, è vero, effettivamente non ce n'è bisogno, però.....sai.....magari 
qualcuno mi preme F5 e si slogga.......potrebbe anche andare, vedo un 
po'......
grazie....good coding!!!


 connessi in quel momento.
io avevo una mezza idea per farla:
richiamare tramite un frame nascosto una pagina in php, con dentro un ciclo
while sempre verificato e uno sleep(1) (la cpu si blocca per un secondo),
nel quale fa la ricerca nel database e liberare il flusso. Per fare tutto
ciò si dovrebbe configurare il server (almeno per sbloccare l'opzione che
interrompe le elaborazioni che sfruttano la cpu per 30 secondi)... ma qui ci
sarebbero anche dei problemi che non posso testare (non disponendo di un
server), come per esempio:
il server puo' non accorgersi di un logout di un utente e continuare ad
elaborare quel ciclo infinito?
Com'è il comportamento del server quando ci sono più di una 30ina di utenti
connessi? (ci sarebbero 30 pagine in esecuzione contemporanemente ognuna con
un secondo di pausa, lo incasinerà? :p)
L'ho testato in locale e funziona... ma rimangono inevasi quei due
interrogativi. sul ng it.comp.www.php non sono stati molto precisi.
ciao,
Luca(riello)


Vero, chiedo scusa...
Ma c'è un modo per intercettare l'evento chiusura della finestra PRIMA che
venga scaricata del tutto (unload)? senza ricorrere ad un window.open e fare
quella operazione con altre vie.
L'opzione di IE è comodissima, perché non la mettono negli standard?
ciao,
Luca(riello)