• User

    Effettuare il log out alla chiusura del browser

    Ciao raga. Ho un problema e credetemi ho provato 3 giorni prima di postare qui per chiedere un aiuto!
    Allora nel mio sito voglio implementare uno script che mi consente di:

    1. Quando l' utente chiude il browser (o si chiude perchè gli esplode il computer), deve effettuare il logout aggiornando il db e distruggergli la sessione!
      Ho letto di cron ma funzia solo su linux e io vorrei fare in modo di usare un metodo che metta d'accordo il pingu e la finestra.
    2. Ho fatto tante prove e questa e' quella che piu' si avvicina. Ho creato uno script che sfrutta gli utenti che navigano sul sito. Ogni volta che un utente fa un passo, lo script legge una variabile di quelli che hanno effettuato il login aggiornandola. Se un utente sta fermo per tot tempo lo script vede che non fa un niente di niente e lo setta a 'out' e se l'utente ritorna e si muove la sua sessione viene distrutta!
      Voi direte: "e se funziona e lo hai gia' fatto che ci stai a rompere??"
      Ma c'e' un ma'!!! (sempre sti cavolo di ma! :nonlodire ).
      Se l'utente legge qualcosa sul sito, lo script non lo sa che e' ancora li che guarda e non tocca niente come un bimbo diligente, lo conta come se fosse andato a fare un bel po' di pipi' per poi dimenticarsi il browser aperto mentre e' fuori con il cane che gli fa fare i bisogni.
      3)Ma mentre e' fuori con il cane un meteorite colpisce casa sua e il suo browser si chiude senza cliccare sul tasto del logout. Dato che non riesce a stare senza il mio sito, intanto che casa sua con tutti i suoi familiari dentro brucia, lui corre al primo internet point per collegarsi ma per sua disgrazia vede che ancora risulta loggato e quindi non puo' accedere se non aspetta quel tempo settato nel mio script (se e' poco lo caccia mentre sta fermo, se e' tanto lui risulta in ancora in linea pur nn essendoci realmente).
      RIASSUMENDO: Quindi il mio problema e' questo =
      Come diavolo faccio a dire al php: "senti quell' utente (o il meteorite) ha chiuso il browser quindi mo tu setti sta' variabile nel db e gli distruggi la sessione! Cosi' posso tornare a dormire!!! :dhò: E l' utente puo finalmente riconnettersi per finire di leggere sul mio sito in pace!! :yuppi:
      P.S sorry ma vista l'ora non mi sono accorto che google mi aveva reindirizzato su ->cms->phpbb e nn nella sezione php.. l'ho ripostato qui sorry

  • ModSenior

    Ciao CIMO,
    la cosa non può funzionare cosi, le sessioni native di php di norma alla chiusura del browser vengono eliminate.
    Tu a quanto sembra non stai usando le sessioni native, ma utilizzi le tabelle del database, se utilizzi i cookie puoi impostare solo una scadenza e alla chiusura del browser il cookie rimane comunque. Per togliere dal database dei record(Le sessioni vecchie) puoi utilizzare uno script in cron che ogni 15 minuti ad esempio elimina i record degli utenti che non hanno visitato una pagina da X minuti.


  • User

    m . m . m......Allora uso le sessioni per salvare i dati che mi servono e poi aggiorno il db per dirgli guarda che l'utente e' 'out' o 'in'
    Solo che se ho un tempo troppo breve e lui sta' leggendo qualcosa poi quando ritorna a muoversi si trova out. Se invece e' troppo lungo e vuole rientrare si vede ancora in e deve aspettare.
    Per cron (come scritto su) vorrei evitarlo perchè su win non va e mi piacerebbe trovare una soluzione che soddisfi tutto.
    Ho emulato anche cron con uno script in background in php ma il problema e' sempre quello il tempo.
    Manca quella parte che davvero alla chiusura effettiva del browser venga aggiornata una variabile o un dato che dica che davvero e' stato chiuso il computer o il browser.....


  • ModSenior

    Ciao CIMO,
    fai attenzione a non utilizzare lo stile sms nei tuoi messaggi...
    Per quanto riguarda il problema, non è possibile fare ciò che hai detto.
    Tra l'altro tentare di usare php su windows è un suicidio, e non c'è un motivo per usare php su un hosting windows.


  • User

    Be diciamo che questo e' il primo problema che ho trovato usando php su windows (anche perche' sto' lavorando in locale) per poi uppare su php.
    ma se quello che dico e' impossibile allora tutti gli altri siti compresi quelli in asp e non solo in php come fanno???


  • ModSenior

    Come ti ho già detto, se usano le tabelle per gestire le sessioni, eliminano i dati inutili utilizzando cron che è la soluzione più efficiente.
    Altrimenti con le sessioni native scadono già automaticamente.
    A nessuno interessa che si slogga all'istante se chiude il browser, se succede dopo 15 minuti non cambia molto.


  • User

    Be non e' che non ti interessa molto...metti caso qui scrivi un post...
    Chiudi il browser e ti sei scordato che devi rientrare, ti vai per riloggare ma risulti online e quindi non entri e devi aspetta' 15 minuti?!?
    Comunque anche con cron o la mia emulazione che funziona sia su win che su linux rimane sempre il problema del tempo.
    Se io ho un utente che si e' loggato e salvo i dati in $_SESSION
    se chiude il browser che succede? quelle session vengono svuotate? Il cookie di sessione che fine fa?Vorrei trovare un modo di dire allo script se quella "PRECISA" sessione nn esiste piu' allora mettilo out questo mi serve
    e come faccio a capire che quella presisa sessione nn c'e'?
    Se non sbaglio le sessioni sono relative al browser che si sta usando quindi come faccio a capire da uno script esterno che quella sessione non c'e'?


  • ModSenior

    Non funziona cosi... Non sò che codice stai utilizzando, ma se funziona come dici tu è concettualmente errato, non funziona cosi l'autenticazione.

    Nel momento in cui l'utente effettua il login riceve un cookie con l'id di sessione, il cookie scadrà OBBLIGATORIAMENTE alla scadenza impostata, non c'è modo per farlo sparite alla chiusura del browser ne tanto meno creare funzioni callback.
    Al login al massimo puoi controllare se ti risulta nella tabella che l'utente X sia attualmente online ed eliminare il dato attualmente presente in tabella e loggare l'ultimo arrivato.
    Tra l'altro se provi su un qualunque sito vedrai che ti permette di loggare con più browser anche contemporaneamente, proprio perchè le sessioni di solito vengono gestite senza fare controlli se l'utente con id X è già loggato ed impedirgli di fare un altro login.
    Ti consiglio di leggere una guida teorica relativa alle sessioni, perchè è molto differente da come stai pensando.

    Utilizzare php su windows dà parecchi problemi comunque, quello che si nota subito è relativo alle funzioni che lavorano con i file, vista la differente gestione dei permessi.
    Emulare il cron presenta numerosi svantaggi, sia prestazionali perchè devi fare un check ad ogni pagina vista da ogni utente il chè si traduce in un utilizzo in eccesso delle risorse a tua disposizione inutilmente, ed eventuali problema di concorrenza tra i processi. Inoltre nessuno ti assicura che ci sia sempre un utente online che ti avvi il cron quando serve.


  • User

    Ok il login lo puoi fare da dove vuoi pero' a me cosi' non piace!
    Non mi va che come facebook uno si logga su un computer e mentre sei loggato puoi entrare da un' altra parte e fare come ti pare....
    lo trovo stupido.
    Se sei loggato dovresti impedire di entrare con lo stesso account da piu' parti.
    E poi l'emulazione del cron, e' uno script in background, che non viene attivato da nessun utente. Lo attivo io dal pannello di controllo e si vede il db le sessioni e tutto quello che riguarda il mio sito.
    Lo so che le sessioni scadono appena chiudi il browser ma appunto sono relative a quel browser li se ne apro un altro avrai una sessione differente.

    Comunque php con xampp in locale su win non mi ha dato mai problemi ne di errori e ne di gestione file o che... ho sempre lavorato in locale e poi uppato su linux ... l'unica cosa che devo guardare sempre sono gli script sui permessi che una volta che li uppo su linux devo controllare che li non ho commesso errori tutto qua...

    Allora per arrivare a una conclusione l' unica cosa che ho da fare per vedere se l' utente risulta ancora online e' usare un tot di tempo che controlla se fa azioni o no.... tutto qui quello che posso fare quindi?


  • ModSenior

    Volendo puoi inserire un cookie aggiuntivo di identificazione(32 Caratteri casuali ad esempio) al login, e nel database memorizzi il valore di identificazione.
    In questa maniera nel database conservi sempre l'identificativo dell'ultimo loggato, e sei in grado di determinare se è un vecchio login e quindi dovrai distruggere la sessione appena visita una pagina, o se è l'ultimo login e quindi va bene cosi.


  • User

    ok faro altre prove e ti faro' sapere. Thanks ciauuu