Visualizzazione dei risultati da 1 a 7 su 7

Discussione: gestione sessioni

  1. #1

    gestione sessioni

    Ciao a tutti!
    Nei seguenti 4 punti spiego come io gestirei le sessioni in PHP.
    Subito dopo troverete delle domande a cui non riesco a dare risposta!
    Sapreste Aiutarmi? Grazie!

    1) Al DB aggiungo la tabella "Sessioni" con la seguente struttura:
    id (char 32)
    idUtente (int chiave esterna Utenti)
    dataCreazione (int secondi)

    2) Creo una variabile globale $idUtente che assumerà il valore di null se l'utente è un visotatore non loggato, altrimenti nel caso una persona si logghi, assumerà il suo id.

    3) Creo il seguente script (lo scrivo in PSEUDO-codice):
    Codice PHP:
    <?php

    $idUtente 
    null;

    function 
    open($save_path$session_name) {
        
    INSERISCO NELLA TABELLA SESSIONISE NON GIA' PRESENTE, L'UTENTE
        ALTRIMENTI 
    (SE GIA' PRESENTE) AGGIORNO NELLA TABELLA SESSIONI IL VALORE DATA_CREAZIONE
    }
    function close() {
        NON FARE NULLA !?!
        return true;
    }
    function read($idSession) {
        AGGIORNO NELLA TABELLA SESSIONI IL VALORE DATA_CREAZIONE
    }
    function write($idSession, $dataSession) {
        AGGIORNO NELLA TABELLA SESSIONI IL VALORE DATA_CREAZIONE
    }
    function destroy($idSession) {
        global $idUser = null; --> IMPORTANTE!!!!
        ELIMINO DALLA TABELLA SESSIONI LA SESSIONE CHE HA ID=$idSession
    }
    function gc($maxlifetime) {
        NON HO CAPITO A COSA SERVE ? ? ?
    }

    session_set_save_handler("open", "close", "read", "write", "destroy", "gc");
    session_start();

    ?>
    4) Quando l'utente effetturà una richiesta al server (ad esempio con una chiamata ajax) controllerò la variabile globale $idUser:
    se $idUser == null stamperò un messaggio "sessione scaduta"
    altrimenti esegue la richiesta

    I MIEI DUBBI:
    -- A cosa dovrebbe servirmi la funzione "gc"?
    -- E' corretto utilizzare la variabile globale $idUser oppure esisite un metodo migliore?
    -- Invece di utilizzare la variabile $idUser per controllare se la sessione è scaduta o meno, non potrei semplicemente fare un controllo di questo tipo:
    if(!isset($_SESSION["idUser"])) echo "sessione scaduta"; (quindi dal mio script elimino completamente questa variabile globale)?
    -- Il campo dataCreazione della tabella Sessioni, per come ho scritto i 4 punti, non mi serve praticamente a nulla, forse sbaglio qualcosa? A cosa dovrebbe servirmi questo campo?
    -- Supponendo che la colonna creazioneData mi serva, per aggiornare il suo valore (nelle funzioni "open","read","write") mi basta utilizzare la funzione time(), corretto?

  2. #2

    Re: gestione sessioni

    Originariamente inviato da ajaxSensitive
    Nei seguenti 4 punti spiego come io gestirei le sessioni in PHP.

    ...

    3) Creo il seguente script (lo scrivo in PSEUDO-codice):
    Codice PHP:
    <?php

    $idUtente 
    null;

    function 
    open($save_path$session_name) {
        
    INSERISCO NELLA TABELLA SESSIONISE NON GIA' PRESENTE, L'UTENTE
        ALTRIMENTI 
    (SE GIA' PRESENTE) AGGIORNO NELLA TABELLA SESSIONI IL VALORE DATA_CREAZIONE
    }
    function close() {
        NON FARE NULLA !?!
        return true;
    }
    function read($idSession) {
        AGGIORNO NELLA TABELLA SESSIONI IL VALORE DATA_CREAZIONE
    }
    function write($idSession, $dataSession) {
        AGGIORNO NELLA TABELLA SESSIONI IL VALORE DATA_CREAZIONE
    }
    function destroy($idSession) {
        global $idUser = null; --> IMPORTANTE!!!!
        ELIMINO DALLA TABELLA SESSIONI LA SESSIONE CHE HA ID=$idSession
    }
    function gc($maxlifetime) {
        NON HO CAPITO A COSA SERVE ? ? ?
    }

    session_set_save_handler("open", "close", "read", "write", "destroy", "gc");
    session_start();

    ?>
    I MIEI DUBBI:
    -- A cosa dovrebbe servirmi la funzione "gc"?

    ...
    Cioè, fammi capire, crei uno script e chiedi a noi perchè ci hai messo una determinata funzione?!
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    Si, perchè quello pseudo-script l'ho ripreso dal manuale PHP:
    http://php.net/manual/en/function.se...ve-handler.php
    leggendo attentamente questo articolo, loro consigliano di appoggiarsi ad un DB, ma non ho capito cosa dovrei fare per ottenere un risultato professionale.

    Se tu conosci bene la logica delle sessioni, e sai come si dovrebbe utilizzare quella funzione, spiegami per favore cosa dovrei fare per controllare (in modo ottimale) se la sessione di un utente non è ancora scaduta (o è scaduta) in una chiamata ajax.

  4. #4
    gc sta per garbage collection (raccolta dei rifiuti). Se guardi l'esempio la differenza tra destroy() e gc() è che il primo elimina fisicamente il file associato ad un particolare session id, il secondo cancella tutti i file corrispondenti a sessioni scadute.
    Se pensi di utilizzare un DB il metodo destroy() corrisponde all'eliminzaione di un record, mentre il metodo gc() elimina tutti i record corrispondenti a sessioni scadute.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    Originariamente inviato da satifal
    gc sta per garbage collection (raccolta dei rifiuti). Se guardi l'esempio la differenza tra destroy() e gc() è che il primo elimina fisicamente il file associato ad un particolare session id, il secondo cancella tutti i file corrispondenti a sessioni scadute.
    Se pensi di utilizzare un DB il metodo destroy() corrisponde all'eliminzaione di un record, mentre il metodo gc() elimina tutti i record corrispondenti a sessioni scadute.
    Ok grazie!
    Quindi il metodo gc elimina tutte le sessioni in un sol colpo.
    Mi sapresti fare un esempio di quando potrebbe accadere questo?

    Le seguenti due istruzioni, corrispondono al metodo destroy o gc?
    session_unset();
    session_destroy();

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    1,802
    Ciao quando una sessione scade!
    Non è tanto importante saper fare,quanto ad avere voglia d imparare .

  7. #7
    Quote Originariamente inviata da rocco.mod Visualizza il messaggio
    Ciao quando una sessione scade!
    Dopo 2 anni e mezzo spero abbia risolto!
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

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.