Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Timer inattività per le sessioni

    Ciao a tutti ho bisogno di sapere se si può modificare il tempo di inattività prima che l'utente venga buttato fuori dalla pagina

    Grazie

  2. #2
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    prova cosi, ma a seconda della configurazione del server potresti ricevere degli errori dovuti a delle limitazioni di sicurezza:

    codice:
    ini_set('session.gc_maxlifetime','numerodisecondi');

  3. #3
    si così avevo già provato ma non funziona perchè non viene modificato il tempo di inattività ma solo della sessione. Leggendo in giro per internet ho trovato che ci sono dei timer che gestiscono il tempo di inattività però non so come modificarli, hai qualche idea?

  4. #4
    Utente di HTML.it L'avatar di gianiaz
    Registrato dal
    May 2001
    Messaggi
    8,027
    In genere la sessione è gestita in questo modo:

    Sul client viene creato un cookie che dura fino alla chiusura del browser nel quale viene salvato il session_id.

    Quando con il tuo browser visiti la pagina php sul tuo sito, il server controlla che tu abbia un cookie con il session_id, e se ce l'hai viene caricato il file contenente i dati di sessione dal percorso di salvataggio delle sessioni.

    Quindi la durata della sessione è data da 2 fattori:

    1. il tuo cookie (ad esempio se lo cancelli la sessione scade immediatamente)
    2. da quanto tempo viene conservato il file sul server.

    Il punto 2 è gestito principalmente dal parametro che ti ho passato che garantisce che la sessione non finisca prima di quel tempo.
    Dopo quel tempo, viene cancellato dal garbage collector che parte ogni TOT volte che viene fatta partire una sessione sul server. Questo TOT è determinato da 2 parametri (gc_probability e gc_divisor).

    Morale, se imposti la durata della sessione a 600 la sessione durerà almeno 10 minuti, ma non è detto che dopo 15 minuti sia ancora valida.

    Il tempo viene contato dall'ultima volta che hai interrogato il server (quindi o un refresh della pagina) o una chiamata ajax.

    Quindi se interagisci con il tuo sito tramite un giochino flash o tramite javascript, può anche essere che la sessione scada nonostante l'interazione dell'utente.

    Finita la parte teorica, il motivo potrebbe essere dato dal fatto che non hai i permessi per settare quel valore e i warning sono disabilitati. Per verificare se il valore viene cambiato prova a lanciare prima e dopo aver lanciato ini_set, un :

    echo ini_get('session.gc_maxlifetime');

    se non cambia nulla vuol dire che il problema è quello, in tal caso dovrai sentire il gestore del server, il quale a seconda della configurazione del server potrebbe decidere di non variare questo valore (in alcuni casi è un valore globale e influenzerebbe tutti gli altri siti presenti sulla macchina).

    Un'altra soluzione anche se non proprio ortodossa sarebbe quella di fare una chiamata ajax al server ogni X minuti, in modo da rinnovare manualmente il conteggio.

    Ciao

  5. #5
    grazie per l'aiuto ho risolto tutto con ajax


  6. #6
    Mi intrometto nella discussione perchè è proprio ciò che stavo cercando...

    nel tempo libero mi diverto un pò con php ...oggi mi è venuto un dubbio a riguardo il tempo di inattività di una sessione e la sua scadenza:

    Gianiaz tu dici che ad ogni richiesta verso il server (ajax o refresh pagine o altro) il tempo di attività della sessione viene aggiornato (presumo diciamo ad ogni session_start())

    Oggi invece ho trovato un'altra teoria secondo il quale la sessione viene aggiornata solo ad ogni aggiornamento dell'array $SESSION,e che quindi potrebbe scadere anche se navigo tra le varie pagine (ad esempio effettuo session_start() e leggo solo l'array per verificare se l'utente è loggato), consigliando quindi di valorizzare una fittizia variabile contatore dopo ogni session_start();


    Ero convinto che ogni session_start() resettasse il tempo di scadenza...proprio perchè l'utente è comunque attivo e sta usando la sessione (anche se non aggiorna nessun dato)


    Grazie per gli eventuali chiarimenti
    Alessandro

  7. #7
    sembra proprio sia così..la lettura dell'array $_SESSION non effettua il refresh della sessione...

    questo esempio sembra aver chiarito i miei dubbi

    Codice PHP:
     session_start();      
    // set timeout period in seconds
    $inactive 600;    
    // check to see if $_SESSION['timeout'] is set  
     
    if(isset($_SESSION['timeout']) ) {
        
    $session_life time() - $_session['timeout']; 
        if(
    $session_life $inactive)   
            { 
    session_destroy(); header("Location: logoutpage.php"); }        
        }      
    $_SESSION['timeout'] = time(); 

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 © 2025 vBulletin Solutions, Inc. All rights reserved.