Visualizzazione risultati 1 fino 6 di 6

Discussione: Creare un sistema di login in php, salvando le sessioni nel database

  1. #1
    Guest

    Predefinito Creare un sistema di login in php, salvando le sessioni nel database

    Come da titolo, mi servirebbe un sistema login che si appoggia al DB, come fanno la maggior aprte dei CMS, esempio phpBB, useBB, Joomla ecc ecc.
    Avete uno snippet per costruirlo? Attualmente ho un login classico, ma per visualizzare la lista degli utenti registrati in linea, l'unico modo è quello di appoggiarmi al DB.

    Grazie in anticipo

  2. #2
    Guest

    Predefinito

    Crei nel db nella taballa degli utenti un campo "ultima azione".
    Metti una pagina comune a tutte le altre (che sò, config.php) che salva la data in time nel campo appena creato. Così facendo ogni volta che carichi una pagina, ti esegue una query che salva la data dell'ultima azione. Poi per vedere gli utenti online cerchi quelli che hanno fatto un'azione e che quindi hanno caricato una pagina negli ultimi 20 minuti (per esempio). Spero di esserti stato utile.

  3. #3
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Allora, crei una tabella con 2 campi: id, timestamp.
    Ogni volta che l'utente effettua il login, inserisci il suo id e il timestamp all'interno della tabella, mentre ogni volta che aggiorna una pagina presente nel tuo sito aggiorni il suo timestamp.

    Per eliminare dalla tabella gli utenti inattivi, puoi sempre sfruttare il timestamp.
    Eccoti un esempio:
    Codice PHP:
    <?php
    $db
    = mysql_connect('localhost', '...', '...');
    mysql_select_db('...', $db);

    $logout = time() - 5 * 60; // gli utenti inattivi per 5 o più minuti verranno cancellati
    $id = 2; // l'id, penso dovrai salvarlo e recuperarlo tramite una sessione.

    mysql_query('DELETE FROM online WHERE time < ' . $logout);

    $q = mysql_query('SELECT * FROM online WHERE id = ' . $id);

    if(
    mysql_num_rows($q) == 1) {
    mysql_query('UPDATE online SET time = ' . time() . ' WHERE id = ' . $id);
    } else {
    mysql_query('INSERT INTO online(id, time) VALUES (' . $id . ', ' . time() . ')');
    }

    $q = mysql_query('SELECT * FROM online ORDER BY id DESC');

    while(
    $r = mysql_fetch_assoc($q)) {
    echo
    $r['id'], ' | Ultima azione: ', date('H:i:s d/m/y', $r['time']), "<br>";
    }

    mysql_close($db);
    ?>
    Ultima modifica di javascripter : 28-07-2010 alle ore 12.25.08

  4. #4
    Guest

    Predefinito

    scusate se intervengo ..
    però può capitare pure che un utente resta collegato senza aggiornare le pagine...eppure questi utenti sono online...forse c'è un modo per cercare il file di sessione corrispondente ad ogni utente....il metodo del timestamp mi sembra poco preciso

  5. #5
    Guest

    Predefinito

    Puoi mettere un aggiorna pagina ogni tot tempo.

  6. #6
    Guest

    Predefinito

    Citazione Originalmente inviato da XxxJoKeRsxxX Visualizza messaggio
    Puoi mettere un aggiorna pagina ogni tot tempo.
    E' sconsigliato, poiché se l'utente sta scrivendo un messaggio molto lungo in un form, potrebbe perdere il contenuto del form.

Regole di scrittura

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