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

    Logout dopo lasso di tempo

    Ho il seguente script inserito in ogni pagina, per verificare se è stata fatta l'autentificazione:

    Codice PHP:
    if(empty($_SESSION['username']) && $_REQUEST['act'] != 'login' && $_REQUEST['act'] != 'login2') {

        
    // Effettuo il redirect alla pagina di login
        
    echo "
        <script>
            window.location = \"index.php?act=login\"
        </script>"
    ;
      } 
    ho dovuto impostare che deve effettuare il redirect se:
    1) non è settata la variabile di sessione "username"
    2) se non ci troviamo ne nella pagina login ne nella pagina di login2 (login2 è l'elaborazione per l'autentificazione)

    Per il fatto che l'autentificazione del sito deve avvenire in ogni pagina e dunque questo codice è inserito nella index dalla quale vengono richiamate tutte le pagine.

    Ora io vorrei fare in modo che dopo un tot di tempo bisogna rieffettuare il login
    Quando si effettua il login viene aggiornata una cella nel db con l'ora attuale (utilizzo NOW()) chiamata "tempo". Io ora volevo inserire il codice di verifica nella funzione sopra.

    Ho scritto queste 2 righe x verificare se è terminata la sessione di tempo
    Codice PHP:
    time() - strtotime($_REQUEST['tempo'])) >= 3600 // 3600 = 60*60 (secondi*minuti) 
    Dove e come dovrei inserirle nel codice x evitare il ciclo perpetuo del redirect?

    xke io ho provato impostando un elseif (empty($_SESSION['tempo']) e al suo interno dopo la verifica un redirect all'act=logout.. solo che continua a rielaborare il ciclo


    Vi posto anche il codice per il login e del logout
    Login:
    Codice PHP:
    // Dopo aver verificato se l'utente e la pass sono correnti
    $stato_on "UPDATE user SET stato = '1', tempo = NOW() WHERE id = '$row[id]'"// row si riferisce all'id dell'utente che ha effettuato il login
    $result_on mysql_query($stato_on) or die(mysql_error());

    // Eseguo la query per iserire l'ora nella variabile di sessione
    $tempo "SELECT tempo FROM user WHERE id = '$row[id]'";
    $result_tempo mysql_query($tempo) or die(mysql_error());
    $row_tempo mysql_fetch_array($result_tempo);


    //metto l'username nella variabile di sessione "username"
    session_register("username");
    session_register("permessi");
    session_register("tempo");
    $_SESSION['username'] = $row['nick'];
    $_SESSION['permessi'] = $row['permessi'];
    $_SESSION['tempo'] = $row_tempo['tempo']; 
    questo è il logout
    Codice PHP:
    // Modifico il campo "stato" nel db per far figurare l'utente offline
    $stato_off "UPDATE user SET stato = '0' WHERE nick = '$_SESSION[username]'";
    echo 
    $stato_off;
    $result_off mysql_query($stato_off) or die(mysql_error());

    // Distruggo le sessioni per fare il logout
    session_destroy();
    session_unregister("username");
    session_unregister("permessi");
    session_unregister("tempo");


    echo 
    "Logout effettuato";
    echo 
    "<script>
                window.location = \"index.php\"
          </script>"

    La rovina del mondo sara' l'indifferenza. Ma chi se ne frega!!

  2. #2
    Non usare session_register, utilizza solo $_SESSION.
    Non usare solo empty, utilizza isset().
    Non utilizzare $_REQUEST, utilizza l'array superglobale specifico (es. $_GET, $_POST).
    Prima di accedere ai dati forniti dall'utente in un array superglobale verifica con array_key_exists o isset se l'indice esiste.
    Per effettuare il redirect utilizza header location (ed eventualmente l'output buffering).
    Non utilizzare " or die(mysql_error());", esponi il sito a possibili attacchi (vengono indicizzati anche gli errori delle query).

    Per richiedere il login dopo X minuti di inattività inserisci in sessione un campo contenente la data dell'ultima richiesta (e' inutile utilizzare il DB se stai gia' utilizzando le sessioni). Se alla successiva richiesta sono passati piu' di X minuti dal valore salvato in sessione, distruggi la sessione e fai il redirect verso la pagina di login.

  3. #3
    Originariamente inviato da filippo.toso
    Non usare session_register, utilizza solo $_SESSION.
    Non usare solo empty, utilizza isset().
    [CUT]
    Scusa per l'OT.
    perchè dici di usare isset e non empty?
    Ciao!

  4. #4
    Perchè empty puo' sollevare un notice undefined index.

  5. #5
    ok, mannaggia non ci avevo pensato...

    ok ok... sono un
    Ciao!

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.