Visualizzazione dei risultati da 1 a 10 su 10

Discussione: TTL sessione in PHP

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    174

    TTL sessione in PHP

    Buonasera a tutti. Sto girando in rete da due giorni alla ricerca del mio quesito, ma penso sia giunta l'ora di arrendersi. Ho svolto diversi progetti in JSP, ma adesso volevo orientarmi sul PHP ed in particolare sto iniziando a studiare le basi per l'accesso, le sessioni, i cookies, e via dicendo. Ora per impostare la durata di inattività di una sessione, in JSP bastava che scrivessi
    codice:
    session.setMaxInactiveInterval(ttl);
    ma non riesco a trovare un'equivalente in php. Da quanto ho trovato in rete bisogna far uso di
    codice:
    ini_set('session.gc_maxlifetime', 'ttl')
    ma a me non funziona. Posto il codice
    codice:
    <?php
    ini_set('session.gc_maxlifetime', 30);
    ini_set('session.gc_probability', 1);
    ini_set('session.gc_divisor', 1);
    
    session_start();
    
    if (isset ($_REQUEST['action'])) {
        switch ($_REQUEST['action']) {
            case 'login':
                if ($_POST['username'] == 'pinco' && $_POST['password'] == '123') {
                    session_start();
                    $_SESSION['username'] = 'pinco';
                }
                break;
            case 'logout':
                session_unset();
                session_destroy();
                break;
        }
        header('Location: index.php');
    }
    
    if (isset ($_SESSION['username'])) {
    ?>
    <!DOCTYPE html>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title></title>
        </head>
        <body>
            <div>
                <h1>Benvenuto</h1>
                
    
    Hai acceduto come <?php echo $_SESSION['username']; ?></p>
                logout
            </div>
        </body>
    </html>
    <?php
    } else {
    ?>
    <!DOCTYPE html>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title></title>
        </head>
        <body>
            <form action="index.php?action=login" method="post">
                <div>username<input type="text" name="username" /></div>
                <div>password<input type="password" name="password" /></div>
                <div><input type="submit" value="login" /></div>
            </form>
        </body>
    </html>
    <?php
    }
    ?>
    Potreste gentilmente dirmi dove schianto.
    Grazie mille.

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    174
    Nessuno sa darmi un indicazione?!

  3. #3
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    ma cos'e' che non funziona?

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    174
    Non funziona perchè dopo che sono passati i 30 secondi la sessione è ancora attiva. Facendo il refresh della pagina non vengo buttato fuori

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    174
    Non funziona perchè dopo che sono passati i 30 secondi la sessione è ancora attiva. Facendo il refresh della pagina non vengo buttato fuori

  6. #6
    La cosa migliore e' gestire manualmente l'expire, giocare con quelle variabili e' inaffidabile/inefficiente.
    Dettagliate informazioni in questa pagina: http://stackoverflow.com/questions/5...ter-30-minutes

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    174
    Quindi se ho capito bene la soluzione discussa è di mettere un timestamp in sessione e controllarlo ad ogni accesso. Se nn è passato più di tot tempo allora si fa il refresh e si prosegue, altrimenti si distrugge manualmente la sessione. Ho capito bene?

  8. #8
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    Originariamente inviato da Hermiod
    Non funziona perchè dopo che sono passati i 30 secondi la sessione è ancora attiva. Facendo il refresh della pagina non vengo buttato fuori
    ma nel mentre, sul tuo server, c'e' almeno un altro script con session_start che viene chiamato?
    Il gc parte durante l'avvio della sessione, ma da quello che so io, non cancella le sessioni relative allo stesso script che lo chiama.
    Per il resto, si, hai capito bene. Un altro metodo, se proprio hai bisogno di controllare con precisione la durata delle sessioni con valori piccoli, e' di salvarle nel db e gestirle come meglio ti pare.

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    174
    no, ho solo lo script postato in esecuzione, comunque la soluzione propostami era proprio quella che cercavo: l'ho appena provata ed è quella che fa al caso mio. Idea semplice e pulita. Grazie mille. Come sempre dei geni

  10. #10
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    Originariamente inviato da Hermiod
    no, ho solo lo script postato in esecuzione
    beh, per questo che non funzionava
    su un server in produzione questo problema non si verifica, c'e' sempre qualche script con session_start chiamato da qualche utente. Ad ogni modo, se vuoi il pieno controllo, quello che hai implementato e' uno dei metodi corretti, si.

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.