Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Sessione che non scade

  1. #1
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505

    Sessione che non scade

    Sto scrivendo un'applicazione che richiede il login per accedere ad una parte riservata.
    Login e logout funzionano correttamente, ma la sessione non scade.
    La gestione, almeno per ora, la lascio a php e con le impostazioni di default.
    In pratica faccio il login, giro un po' di pagine, poi chiudo il sito (non facendo il logout) lasciando aperto il browser (Firefox) e navigo su altri siti, poi anche tornando sulla mia applicazione dopo più di un'ora risulto ancora loggato, la sessione non risulta scaduta.

    Cosa dovrei controllare per scoprirne la causa?

  2. #2
    Per scoprirne la causa, devi considerare che per poter scadere una qualsiasi cosa deve avere un momento di inizio ed una durata oppure un momento di scadenza.

    E tali dati devono essere accessibili alle tue pagine, ad esempio memorizzandoli con altri dati della $_SESSION al momento del login.
    Le tue pagine, se è passato il momento di scadenza, cancelleranno la sessione e redirezioneranno al form di login.

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Il momento di inizio non si ha ogni volta che viene eseguita l'istruzione session_start()?
    Questa tra l'altro azzera e fa ripartire un timer, o no?

    Nel file php.ini ho
    session.gc_maxlifetime = 1440
    questo non dovrebbe far scadere la sessione dopo 24 minuti?

  4. #4
    No, session_start dice solo a php che questaa pagina dovrà riesumare la sessione dell'utente attuale, non resetta nessun counter o timer.

    Dovrai tu settare ad esempio $_SESSION["tempoinizio"]=time();

    Non so dirti di session.gc_maxlifetime, forse la impostazione è sovrascritta da altre impostazioni, o forse non usa i secondi come unità di misura...
    Tecnolgie per l'arte.
    Arti per la tecnologia.
    softhare

  5. #5
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Il commento nel file php.ini dice così:

    ; After this number of seconds, stored data will be seen as 'garbage' and
    ; cleaned up by the garbage collection process.
    session.gc_maxlifetime = 1440

  6. #6
    Originariamente inviato da Alhazred
    Il commento nel file php.ini dice così:

    ; After this number of seconds, stored data will be seen as 'garbage' and
    ; cleaned up by the garbage collection process.
    session.gc_maxlifetime = 1440
    se non chiudi il browser il cookie di sessione rimane sempre valido. Non e' che a scadenza dei 1440 secondi la sessione "scada" ma viene semplicemente resa disponibile al garbage collector che se la trova la elimina. Non e' sistematica la cancellazione ma diventa solo possibile.

    La sessione ha due vite, una lato server definita con

    ; After this number of seconds, stored data will be seen as 'garbage' and
    ; cleaned up by the garbage collection process.
    session.gc_maxlifetime = 1440

    l'altra lato client definita con

    ; Lifetime in seconds of cookie or, if 0, until browser is restarted.
    session.cookie_lifetime = 0

    session_start() cerca di leggere il cookie di sessione. Se esiste cerca il file di sessione corrispondente e rende utilizzabile il suo contenuto. Se non trova il file ne creera' uno nuovo assegnandogli un nuovo session_id

    non ci sono timer ma solo data/ora ultima apertura del file di sessione

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Ok, quindi dovrò gestire io la scadenza della sessione, non posso contare in una gestione automatica di default.

    E' sufficiente una cosa di questo tipo?
    - nello script che convalida il login (quindi uno script che viene eseguito una sola volta) inizializzo la variabile $_SESSION['timer'] = time();
    - in ogni pagina dell'area riservata inserisco uno script fatto così
    Codice PHP:
    session_start();
    if(
    time() - $_SESSION['timer'] > SOGLIA) { //SOGLIA sarà una costante che mi definisce la durata della sessione
       
    session_unset();
       
    session_destroy();
       
    //redirect alla home page
    }
    else {
       
    $_SESSION['timer'] = time();


  8. #8
    Si, direi che è proprio ciò che ti serve.
    Tecnolgie per l'arte.
    Arti per la tecnologia.
    softhare

  9. #9
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Originariamente inviato da Alhazred
    Ok, quindi dovrò gestire io la scadenza della sessione, non posso contare in una gestione automatica di default.
    Non è vero.
    Il problema del garbage collector è che viene lanciato con una probabilità che è legata a due impostazioni di php.ini: session.gc_probability e session.gc_divisor
    In realtà, su un server condiviso, come quelli su cui si trova la maggior parte dei siti, la quantità di chiamate è sufficiente a far sì che, anche con un valore di probabilità basso, le sessioni scadute vengano comunque eliminate in breve tempo.
    Sul tuo server locale, se vuoi risolvere il problema, è sufficiente impostare lo stesso valore per quei due parametri (di default sono 1 e 100 rispettivamente, il che significa, appunto, 1 richiamo del garbage collector ogni 100 richieste, a livello probabilistico)

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.