Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    179

    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 xke 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 taaaaante 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 nn 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! ).
    Se l'utente legge qualcosa sul sito, lo script nn lo sa che e' ancora li che guarda e nn 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 ke 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 nn puo' accedere se nn 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 ne db e gli distruggi la sessione! cosi' posso tornare a dormire!!! e l' utente puo finalmente riconnettersi per finire di leggere sul mio sito in pace!!

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    719
    La soluzione migliore è quella del timeout. Settalo a 30 minuti.
    Altrimenti se hai tempo da perdere metti un javascript che "sente" il movimento del mouse e in base a quello aggiorna la variabile del db tramite ajax request.


  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    179
    Mmmm lo sai che quella del mouse nn ci avevo pensato proprio? eheh
    Cmq rimane sempre il problema che se l'utente legge o scrive e nn tocca il mouse se il tempo e' troppo corto lo butta fuori se e' troppo lungo e vuole rientrare si vede che deve attendere xke e come se risultasse gia' loggato.
    Con il timeout come lo vorresti usare?
    E cmq nn c'e' un modo che se si chiude proprio il browser o il computer senza premere su logout il php o javascript riconosce che il mio sito e' stato chiuso e allora la si che davvero setta l'utente su out?

  4. #4
    che se l'utente legge o scrive e nn tocca il mouse
    bè metti un controllo javascript anche per eventi tastiera

  5. #5
    nn penso perchè da quanto so (ma potrei sbagliarmi) javascript nn sa nulla di quando si chiude il borwser.
    l'unico modo che mi viene in mente è di usare le sessione di php.
    quando il borwser si chiude la sessione si distrugge.

    io ho un problema simile al tuo diciamo e ci sbattendo un pò la testa.

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    179
    si e' vero le sessioni si distruggono ma il problema rimane..ti spiego
    Nn voglio usare cron solo per un motivo..nn funzia su win e dovresti sempre adattare il tuo lavoro in base al server (su win mettendo lo script in op pianificate etc etc) e quindi voglio trovare la suluzione che soddisfi tutti.
    Quindi ho 'emulato' cron con uno script php in background...solo che la sessione si riferisce al tuo browser quindi nn puo' sapere quale sessione di chi, sia stata distrutta..anche perche' il cookie di sessione alla chiusura del browser nn si elimina...si elimina solo se fai logout dal bottone appunto perche' viene evocata session_destroy()
    Quindi rimane sempre il problema di come diavolo fa capire a sto browser che e' stato chiuso o che l'utente nn esiste piu' sul sito...
    Vediamo: l'utente si logga...naviga nel sito e intanto uno script controlla ogni tot tempo l'aggiornamento della sua data (che sarebbe la data di login + now() )
    se vede che viene aggiornata allora ok sta navigando ... ma se invece lui legge e nn tocca niente viene buttato fuori...ma come diavolo fanno gli altri siti che appena chiudono il browser ti fanno il logout che appena lo riapro per rientrare sono bello li pronto a farlo????

  7. #7
    potresti provare con un popup però non è supportato su tutti i browser, è anke un mio problema, il problema senza il meteorite è piuttosto semplice:basta far partire una richesta AJAX all'evento onUnload del body però col meteorite o col vulcano k sia non so proprio cosa fare....

  8. #8
    Non ho capito bene una cosa: le sessioni - salvo diversa configurazione - si autodistruggono quando viene chiuso il browser, quindi perche' non vanno bene le sessioni?

  9. #9
    e come bisognerebbe fare con le sessioni??? non sono mai riuscito a capirlo, come si fa a catturare l'evento della distruzione di una sessione??

  10. #10
    Se ti fa piacere ho fatto uno scriptino che lo devi includere in ogni pagina e controlla gli utenti online, inattivi e offline con le sessioni e una tabella status_utenti, io te lo posto poi se vuoi usarlo fai pure =)

    Codice PHP:
    <?php
    //controlli utenti online/offline
    session_start();
    $archivio=mysql_connect("http://projectphp.altervista.org""projectphp""narutologin");
    $beta=mysql_select_db("my_projectphp");

    $time=time();
    //controlli per l'utente connesso
    $nick_sess=$_SESSION['nick'];
    if (!empty(
    $nick_sess)){

        
    $query=mysql_query("SELECT * FROM status_utenti WHERE idut='$nick_sess'");
        
    //se non è inserito lo inserisco
        
    if (mysql_num_rows($query) == 0){
            
    $insert=mysql_query("INSERT INTO status_utenti (idut,time_stamp,stato) VALUES ('$nick_sess','$time','online')");
        }
        else{
         
    //se è inserito aggiorno il suo timestamp

            
    $query=mysql_query("UPDATE status_utenti SET stato='online', time_stamp='$time' WHERE idut='$nick_sess'");
        }

    }

    //controlli per tutti gli utenti
    $res $time-600;
    //cancello gli utenti che hanno superato i 10 minuti di inattività
    $query=mysql_query("DELETE FROM status_utenti WHERE time_stamp<$res");
    //imposto su inattivi quelli che hanno superato di 5 minuti
    $res$time-300;
    $query=mysql_query("UPDATE status_utenti SET stato='inattivo' WHERE time_stamp<$res");
    ?>
    naturalmente più utenti ci sono sul sito che navigano più la tabella status_utenti è aggiornata.
    Si divide in 2 fasi lqa prima quella deti controlli dell'utente loggato con la sessione che avviene solo se c'è un utente la seconda è quella che avviene con qualunque persona che apre quella pagina, con 2 query modifico il database.
    Naturalmente al login devi inserirlo nella tabella con timestamp e tutto!
    Ciao
    Che mondo sarebbe senza Nutella.

    PHP/MYSQL/HTML/CSS/JAVASCRIPT

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.