Visualizzazione risultati 1 fino 6 di 6

Discussione: [PHP] Sessioni login

  1. #1
    Guest

    Predefinito [PHP] Sessioni login

    Ciao a tutti, ho creato uno script login in php che usa le sessioni però il problema e che alla chiusura del browser perdo la sessione cioè i dati del utente...
    Vorrei che la sessione duri fino al logout del utente, avete consigli non vorrei usare i cookie per motivi di sicurezza...

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,572

    Predefinito

    Beh, le sessioni usano i cookie per ricordarsi il sid...

    Comunque, guardati la session_set_cookie_params().

    p.s: oppure implementati un sistema di sessioni personalizzato (cookie+database).

    Ciao!
    Ultima modifica di alemoppo : 08-08-2011 alle ore 02.59.13

  3. #3
    Guest

    Predefinito

    Codice PHP:
    session_set_cookie_params(3600);
    Non funziona...
    p.s: oppure implementati un sistema di sessioni personalizzato (cookie+database).
    In che senso....

  4. #4
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,572

    Predefinito

    Non ne ho mai avuto bisogno e non l'ho mai fatto; una idea che mi viene in mente può essere questa:

    Fai una tabella su db (mysql o sqlite) in questo modo:
    Codice:
    -----------------------
    |riferimento|contenuto|
    -----------------------
    ('riferimento' dovrebbe essere chiave primaria)

    Generi una stringa casuale che non sia presente in 'riferimento'.

    A questo punto, salvi nel cookie la stringa casuale generata; mentre nella tabella salvi la stringa casuale e il contenuto associato.

    Ricapitolando, nel cookie hai la stringa casuale (che nelle sessioni si chiama SID) che ti permette di "accedere" a 'contenuto' salvato nel server.

    Quindi, per prelevare il contenuto, invece che fare $_SESSION, dovrai fare:
    Codice:
    SELECT contenuto FROM sessioni WHERE riferimento=$COOKIE['mio_sid']
    (controllando prima l'esistenza di $COOKIE e prendendo le precauzioni per evitare sql_injection...).

    Fin che l'utente ha il cookie salvato, sarà loggato. Se effettua il logout, non dovrai fare altro che eliminare la riga con il campo 'riferimento' del cookie.

    (dovrai prevedere, inoltre, se l'utente ha un cookie con un riferimento che non esiste nel database {io, in questo caso, eliminerei il cookie}).

    Ciao!
    Ultima modifica di alemoppo : 08-08-2011 alle ore 13.22.48

  5. #5
    Guest

    Predefinito

    Codice PHP:
    CREATE TABLE `sessioni` (
    `
    id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `
    code` VARCHAR( 25 ) NOT NULL
    `id_utente` INT( 11 ) NOT NULL
    ) ENGINE = MYISAM ;
    Dici una tabella cosi, pero non ho capito bene il tuo ragionamento ad riguardo...

  6. #6
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,572

    Predefinito

    Codice:
    CREATE TABLE sessioni (riferimento VARCHAR (20) NOT NULL AUTO_INCREMENT PRIMARY KEY, contenuto VARCHAR (255));
    Nel login:
    Codice PHP:
    $durata_secondi = 1000000;
    do
    //genero la stringa random che userò come riferimento tra cookie/database.
    {
    $stringa_random = get_stringa(20);//restituisce una stringa di n caratteri random
    $q = sqlite_suery("SELECT * FROM sessioni WHERE riferimento='$stringa_random'");
    }
    while(
    sqlite_num_rows($q));
    setCookie('nick', $stringa_random, time()+$durata_secondi); //setto il cookie
    sqlite_query("INSERT INTO sessioni (riferimento, contenuto) values ('$stringa_random','$nick')"); //salvo nel db
    Per controllare se è loggato:
    Codice PHP:
    if(isset($COOKIE['nick']))
    {
    $q = sqlite_query("SELECT * FROM sessioni WHERE riferimento='".$COOKIE['nick']."'");
    if(!
    sqlite_num_rows($q))
    setCookie('nick', $stringa_random, time() - 1234); //elimino il cookie
    else
    {
    $riga = sqlite_fetch_array($q, SQLITE_ASSOC);
    $nick = $riga['contenuto'];
    }
    }
    else echo
    'devi loggarti';
    p.s: non sono script risolutivi; li ho fatti al volo con il solo scopo di far capire più o meno come funziona il ragionamento...


    ___
    (dopo che hai capito il ragionamento)
    nota: io ho salvato solo il nick; quindi dovresti fare una riga ogni dato che vuoi salvare. Invece, per "somigliare" alle sessioni, potresti salvare addirittura un array in formato json; quindi ti ritrovi un array proprio come $SESSION.
    Dimenticavo: per il logout, è sufficiente una cosa come:
    Codice:
    DELETE FROM sessioni WHERE riferimento=$COOKIE['nick']
    Ciao!
    Ultima modifica di alemoppo : 08-08-2011 alle ore 18.30.50

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •