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

    Login e gestione sessione(session.gc_maxlifetime)

    Ciao a tutti,

    prima di scrivere questo post ho cercato su internet e nel forum ma non ho trovato materiale utile per risolvere il problema legato alla ridefinizione della durata di una sessione lato server.

    per farvi capire meglio il mio problema lo sintetizzo...

    dopo aver creato lo script per il logIn vorrei gestire sia lato client che lato server la durata delle sessioni.

    LATO CLIENT:

    ho gestito la durata della sessione in questo modo:

    Codice PHP:
            $garbage_timeout 60000;

            if (isset(
    $_SESSION['timeout']) ) 
            {
                
    $session_life time() - $_SESSION['timeout'];
                
                if(
    $session_life $garbage_timeout)
                { 
                    
    session_destroy(); 
                    
    header("Location: ?logOut=true"); 
                }
            }

            
    $_SESSION['timeout'] = time(); 
    questo script funziona bene, adesso dovrei impostare lo stesso numero di secondi sul server cosi da scadere quasi contemporaneamente.

    LATO SERVER:

    Ho utilizzato ini_set

    Codice PHP:
    ini_set('session.gc_maxlifetime'$garbage_timeout); 
    Ma la sessione sul server è sempre attiva... NON SCADE. potete suggerirmi come utilizzare bene 'gc_maxlifetime' anche riciclando lo script postato sopra :quote: .

    Grazie aspetto una vostra illuminante risposta.

  2. #2
    ini_set devi metterlo dopo un session_start(), altrimenti va a leggere il valore di default del php.ini
    V.I.S.T.A. --> Virus Inside, Switch To Apple

  3. #3
    Ciao mr.Click,

    ho fatto semplicemente questa modifica :


    Codice PHP:
            $garbage_timeout 60;
            
    session_start();
            
            
    ini_set('session.gc_maxlifetime'$garbage_timeout);

            if (isset(
    $_SESSION['timeout']) ) 
            {
                
    $session_life time() - $_SESSION['timeout'];
                
                if(
    $session_life $garbage_timeout)
                { 
                    
    //session_destroy(); 
                    
    header("Location: ?logOut=true"); 
                }
            }

            
    $_SESSION['timeout'] = time(); 

    e dopo aver fatto passare il tempo dichiarato, utilizzo questa semplice struttura per verificare se la sessione è ancora attiva.

    Codice PHP:
                        if ( isset($_SESSION['ssnLog']) )
                        {
                            
    print_r ($_SESSION['ssnLog']);
                        }
                        else
                        {
                            
    print_r ($_SESSION['ssnLog']);
                            echo 
    "nulla";
                        } 
    Sembra che il gc la elimini correttamente perchè vi stampa "nulla".

    puoi confermarmi se è corretto ?
    Ciao e Grazie.

  4. #4
    devi mettere sempre session_start() prima del codice per utilizzare le variabili di sessione..
    V.I.S.T.A. --> Virus Inside, Switch To Apple

  5. #5
    Ciao ho appena letto il tuo post,


    Codice PHP:
           $garbage_timeout 60
            
    session_start(); 
             
            
    ini_set('session.gc_maxlifetime'$garbage_timeout); 

    if (isset(
    $_SESSION['ssnLog'])
    {
            if (isset(
    $_SESSION['timeout']) ) 
            { 
                
    $session_life time() - $_SESSION['timeout']; 
                 
                if(
    $session_life $garbage_timeout
                { 
                    
    //session_destroy(); 
                   // puoi gestire qui la distruzione della sessione o nella pagina di logOut 
                    
    header("Location: ?logOut=true"); 
                } 
            } 


            
    $_SESSION['timeout'] = time();


    devi utilizzare questo codice solo quando la sessione di log è attiva cioè dopo che hai effettuato il logIn e settato la sessione $_SESSION['ssnLog'] e non all'interno dello script come nel codice postato.

    Dopo il logIn, questo script inizierà a funzionare calcolando i sec (in $_SESSION['timeout'] ) di inattività della pagina e se superati lancerà la pagina di logOut.

    Ovviamente $_SESSION['timeout'] verrà inizializzato se navighi nelle pagine del sito entro il tempo di inattività previsto.

    fammi sapere.
    Ciao

  6. #6
    Ciao Notturno,

    ho riprovato il codice postato dividendolo su due pagine come fai tu, e funge tutto.

    ti spiego.

    premetto che ho ridotto di poco la durata della sessione per velocizzare il tutto ed inserito echo per avvertirti dello stato della sessione di log.

    pagina A:

    Codice PHP:

    <?php 
    session_start
    ();   
    // parte relativa al login che inserirò 
    $_SESSION['ssnLog'] = 1;   
    echo 
    "<a href=\"b.php\">Go</a>"
    ?>

    pagina B:

    Codice PHP:

    <?php
    $garbage_timeout 
    40
    session_start(); 
              
            
    ini_set('session.gc_maxlifetime'$garbage_timeout); 

    if (isset(
    $_SESSION['ssnLog']) )

            if (isset(
    $_SESSION['timeout']) ) 
            { 
                
    $session_life time() - $_SESSION['timeout']; 
                  
                if(
    $session_life $garbage_timeout
                { 
                    
    //session_destroy(); 
                   // puoi gestire qui la distruzione della sessione o nella pagina di logOut 
                    //header("Location: ?logOut=true"); 
                
    echo "LogOut";
                    
                }
                else
                {
                    echo 
    "stai in sessione";
                }
            }


            
    $_SESSION['timeout'] = time(); 
    }

    ?>

    prova questo codice e spero che ti funzioni tutto senza problemi.

    fammi sapere

    Ciao.

  7. #7
    Ciao,

    si penso a questo punto non valorizzi la sessione quindi il codice fa le bizze.

    mmm non ho il tempo per testare ma forse il problema deriva dalla dichiarazione di session_start in pagina b.... prova a non dichiararlo !

    adesso ti lascio perchè sono devastato

    fammi sapere se funge.

    notte e buon codice.

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.