Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    stabilire un timeout per $_SESSION

    Ciao. Ho creato un'area riservata protetta da username e password. Se username e password sono presenti nel database, salvo lo username in una variabile di sessione.
    Ora, come posso fare affinchè dopo X minuti di inattività la variabile venga cancellata?

  2. #2
    Vuoi cancellare solo quella variabile o distruggere l'intera sessione? Perché nel secondo caso allora dovresti impostare dei valori nelle direttive del php.ini, cioé:

    session.gc_maxlifetime = QUI METTI IL NR. DI SECONDI PER LA SCADENZA DELLA SESSIONE

    ti consiglierei anche di usare:

    session.cache_expire =

  3. #3
    E se invece volessi cancellare solo quella variabile?

  4. #4
    Aggiungi una colonna alla tabella, contenente l'ora dell'autenticazione, in cui sono salvati user e pass.
    Ogni volta che l'user visita una pagina del tuo sito; fai tempo_corrente - tempo_nel_db; se è superiore o uguale al tuo limite massimo, distruggi la sessione e resetti il tempo nel db.


  5. #5
    Come ti ha suggerito menphisx devi tenerti traccia anche dell'ora in cui hai salvato lo username ma non nel DB ma nella sessione.

    Immagino che ogni pagina che hai nella zona riservata inizi richiamando un controllo sullo username che hai immagazzinato nella sessione, semmai lo fai includendo un file tipo

    include('controllo.inc.php')

    Qui, puoi prenderi l'ora corrente con il comando date o time e confrontarlo con quello immagazzinato in sessione, se il tempo è scaduto allora fai:

    unset($_SESSION['ora_accesso']);
    unset($_SESSION['username_fornita']);

    Ciao.

  6. #6
    Originariamente inviato da gianf_tarantino
    Come ti ha suggerito menphisx devi tenerti traccia anche dell'ora in cui hai salvato lo username ma non nel DB ma nella sessione.

    Immagino che ogni pagina che hai nella zona riservata inizi richiamando un controllo sullo username che hai immagazzinato nella sessione, semmai lo fai includendo un file tipo

    include('controllo.inc.php')

    Qui, puoi prenderi l'ora corrente con il comando date o time e confrontarlo con quello immagazzinato in sessione, se il tempo è scaduto allora fai:

    unset($_SESSION['ora_accesso']);
    unset($_SESSION['username_fornita']);

    Ciao.
    ottimo.. e per immagazzinare l'ora di accesso uso la classica funzione time() di php immagino?

  7. #7
    Si, però ricorda che time() restituisce il nr. di secondi, quindi il tuo tempo limite lo devi esprimere in secondi.

    Ciao.

  8. #8
    quindi quando uno effettua il login per la prima volta io faccio:

    $timelogin=time();
    $_SESSION['user']=$_POST['user'];
    $_SESSION['ora_scadenza']=$timelogin+3600; (supponendo 1ora di sessione concessa);


    poi nelle pagine in cui effettuo il controllo:

    session_start();
    if (empty($_SESSION['lgn'])) {
    header('location:index.php');
    } else if ($_SESSION['ora_scadenza']<time()){
    header('location:sessionescaduta.php');
    } else {
    ...contenuti....
    }

    giusto?

  9. #9
    Si.

    Qui:

    if (empty($_SESSION['lgn'])) {

    forse volevi scrivere

    if (empty($_SESSION['user'])) {

    .....

  10. #10
    Anzi, no, perché così tu fai scadere la sessione dopo che passa un'ora dal login. Tu, invece, vuoi far scadere la sessione solo dopo un'ora di inattività, quindi:


    session_start();

    $ora_attuale = time();

    if (empty($_SESSION['user']))
    {
    header('location:index.php');
    }
    else if ($_SESSION['ora_scadenza']<$ora_attuale)
    {
    header('location:sessionescaduta.php');
    }
    else
    {
    //Aggiorniamo l'ora di scadenza, a partire da ora
    $_SESSION['ora_scadenza'] = $ora_attuale+3600;
    ...contenuti....
    }

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.