Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    50

    Differenza tra login con cookie e quello con le sessioni

    Salve a tutti. Vorrei sapere quali sono le differenze tra un sistema login che utilizza i cookie e uno che usa le sessioni.

  2. #2
    Ciao,
    nessuna differenza, le sessioni usano i cookie, i cosiddetti cookie di sessione appunto (per distinguerli dai cookie traccianti).

    Il punto è che, come si suol dire, internet è "senza stato", cioè la comunicazione fra client e server si esaurisce in una coppia richiesta/risposta senza che venga tenuta memoria sul server di precedenti richieste già fatte da un certo client.

    Questo è uno dei principali limiti di internet, dovuto al fatto che era nata per tutt'altro scopo che quello per cui viene utilizzata oggi, e porterebbe a doversi autenticare ogni volta che si richiede al server una pagina protetta anche se ci si è già autenticati un attimo prima perché il server, appunto, non serba memoria dei collegamenti avvenuti in precedenza.

    Per superare questo limite è stato inventato il sistema delle sessioni che permette al server di scrivere sul client un piccolo file di testo, il cookie, contenente una stringa, chiamata identificativo di sessione, e pochi altri dati in modo che nei minuti seguenti possa riconoscere quel particolare client e "ricordarsi" che si è già autenticato e che quindi gli si possono fornire le pagine riservate senza remore.

    Le sessioni sono delle zone di memoria che il server riserva alla comunicazione con un particolare client e servono a contenere l'identificativo di sessione e altri dati a discrezione di chi ha creato il sito.

    Il server periodicamente controlla che il client sia ancora connesso o che venga effettuata qualche operazione altrimenti cancella la sessione e libera le risorse. La sessione può anche essere cancellata esplicitamente cliccando sui link di logout presenti in tutte le aree riservate (session_destroy).

    I cookie di sessione, infine, vengono scritti con un parametro che ne provoca l'autodistruzione dopo un certo numero di giorni o ore.

    Quindi, in pratica, i dati del login vengono mandati ad un programma php che li verifica e che ha come prima istruzione in assoluto una session_start() che è quella che si occupa della gestione automatica delle sessioni (se il cookie non esiste lo crea e crea la sessione, se esiste si aggancia alla sessione esistente), se i dati sono corretti scrive qualcosa (tipicamente il nick di login o un flag) in una variabile di session appositamente creata e passa il controllo alla entry page dell'area riservata se invece l'autenticazione è errata distrugge la sessione e segnala l'errore o rimanda alla home page o altre azioni a scelta:

    codice:
    <?php
    session_start();
    $nick = htmlspecialchars(trim($_POST['userid']));
    $pwd = htmlspecialchars(trim($_POST['pwd']));
    
    -- verifica dei dati di autenticazione --
    
    if (autenticazione corretta) {
       $_SESSION['id'] = $nick;
       header("Location: areaprivata.php");
    } else {
       session_destroy();
       header("Location: index.htm");
    }
    ?>
    Le pagine dell'area privata poi dovranno avere tutte all'inizio il test sull'avvenuta autenticazione:

    codice:
    <?php
       session_start();
       if (!isset($_SESSION['id'])) {
          session_destroy();
          header("Location: index.htm");
       }
       print ("benvenuto " . $_SESSION['id']);
    
       -- altre istruzioni --
    
    ?>
    A grandi linee funziona così, forse sono stato un po' prolisso, la tua domanda era più circoscritta ma avevo voglia di muovere le dita sulla tastiera, comunque spero che possa essere utile a te o a qualcun altro e spero di non aver commesso errori perché ho scritto tutto in velocità quindi potrebbe esserci qualche errore o qualche svista.

    Ciao
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

  3. #3
    Rileggendo a mente fresca ho già trovato un errore: dopo ogni header è necessario mettere una:

    codice:
    exit;
    altrimenti l'elaborazione continua, come detto qui

    http://forum.html.it/forum/showthrea...9#post13215689

    ciao
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

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.