Come costruire un sistema di accesso completo

In questo tutorial ti mostrerò come creare un semplice sistema di login composto da una pagina di accesso, una pagina di registrazione, una pagina di password dimenticata, un'attivazione email, una pagina di disconnessione e infine una pagina online degli utenti. Ho fatto questo tutorial principalmente per indirizzare gli sviluppatori new-to-PHP, perché quando ho iniziato ho notato la mancanza di quantità di sistemi di login di base. Pertanto, ho deciso di crearne uno da solo dando consigli di alta qualità su come realizzare il tuo primo sistema di accesso con uno script online per gli utenti!


1. Creare un foglio di stile di base

Creeremo un foglio di stile CSS molto semplice solo per aggiungere un po 'di design e riordinare il modo in cui appare questo sistema di login. Quindi inizia con il tuo editor di testo e possiamo iniziare a creare il nostro styelsheet.

body font-family: arial; font-size: 10pt;  table font-size: 10pt; margine: 0 auto;  #border border: 2px solid # 999; sfondo: #CCC; imbottitura: 15px; margine: 0 auto; larghezza: 300 px; 

Salva questo file come style.css così possiamo collegarci ad esso ogni volta che è necessario. Lì abbiamo il nostro semplice foglio di stile! Ora possiamo iniziare a creare le nostre pagine senza doverci preoccupare troppo di farle sembrare abbastanza buone.



2. Creazione della pagina di accesso

Ok, abbiamo definito un foglio di stile, ora è il momento di mostrare le cose sulle nostre pagine. Apri un nuovo file nel tuo editor di testo, questo sarà il nostro login.php pagina!

  
Nome utente:
Parola d'ordine:
Registrati | Hai dimenticato il passaggio

Va bene questo è ciò che è nostro login.php il file apparirà prima che il nostro PHP faccia funzionare correttamente il modulo di login. Al momento noterai che non funziona. Questo perché non abbiamo detto alla pagina cosa fare se il modulo è stato inviato.

Pianificazione

Ora pianifichiamo prima di immergerci nel PHP. Dobbiamo chiederci "Qual è la pagina che verrà verificata quando il modulo viene inviato?". Per la pagina di accesso ecco un elenco di ciò che stiamo andando a controllare -

  • Sono stati compilati sia il nome utente che la password
  • Che il nome utente fornito esiste nel nostro database
  • Che se il nome utente esiste nel nostro database, la password corrisponde a quella del nome utente
  • Infine, l'utente ha attivato il proprio account

Se il PHP può rispondere sì a tutti e quattro questi punti, quindi accedere l'utente in. Ora in quei quattro punti si noterà che c'era un database menzionato. Utilizzeremo un database MySQL per memorizzare tutte le informazioni su ciascuno dei nostri utenti. Quindi, prima di iniziare PHP, dobbiamo creare questo database. A questo punto è necessario un po 'più di pianificazione. Dobbiamo decidere quali informazioni dobbiamo memorizzare sugli utenti, quali tipi di dati stiamo memorizzando, abbiamo bisogno di un valore predefinito ecc. Ecc. Ecco il mio piano qui sotto -

  • Abbiamo bisogno di memorizzare un nome utente per l'utente che sarà un varchar
  • Abbiamo bisogno di una password che sarà anche un varchar
  • Avremo bisogno di un'e-mail per la nostra funzione di attivazione della posta elettronica che può essere anche varchar
  • Un field telling è se l'account è stato attivato o meno, questo sarà un numero intero
  • Un campo che fornisce informazioni sul fatto che l'utente sia online o no, questo sarà un numero intero
  • Infine, un campo che ci dà un tempo che l'utente ha registrato, questo è anche un numero intero

Costruire il database

Ora da questo possiamo vedere esattamente come costruire la nostra tabella nel nostro database. Per prima cosa creare un database chiamato loginTut. Quindi in questo database vogliamo eseguire l'SQL che ho fornito di seguito -

Nota: Tutte le tabelle contengono una chiave primaria. Questo è un identificativo univoco per ogni riga nella tabella!

CREATE TABLE SE NON ESISTE 'users' ('id' int (11) NOT NULL auto_increment, 'username' varchar (32) NOT NULL, 'password' varchar (32) NOT NULL, 'online' int (20) NOT NULL default '0', 'email' varchar (100) NOT NULL, 'active' int (1) NOT NULL predefinito '0', 'rtime' int (20) NOT NULL predefinito '0', PRIMARY KEY ('id')) ENGINE = MyISAM DEFAULT CHARSET = utf8;

Ora abbiamo una tabella per memorizzare tutte le informazioni di cui abbiamo bisogno sui nostri utenti, aggiungiamo un utente a scopo di test. Per fare ciò, eseguire l'SQL fornito di seguito -

INSERISCI 'utenti' ('id', 'username', 'password', 'online', 'email', 'active', 'rtime') VALUES (1, 'testing', 'testing', 0, 'fake @ noemail.co.uk ', 0, 0);

Quindi ora abbiamo un utente con il nome utente analisi, la password analisi ed e-mail [email protected]. Ora possiamo accedere al PHP e creare il modulo di login!

Aggiungere il PHP

Per prima cosa dobbiamo pensare alla sicurezza e quanto sarà sicuro questo modulo di accesso. Per aiutare a prevenire SQL Injection, una forma molto comune di hacking del database, creeremo una funzione che proteggerà tutte le stringhe memorizzate nel database. Questo inseriremo un file esterno chiamato functions.php. Ecco la fonte -

 

Questa funzione taglierà la nostra stringa (eliminerà qualsiasi spazio bianco all'inizio o alla fine della stringa), tag strip (rimuoverà tutti i tag html e PHP nella stringa), quindi aggiungerà le barre ai segni vocali di escape della stringa (') e Virgolette (").

Torna a login.php

Ora abbiamo un posto dove archiviare e controllare le informazioni dell'utente, una funzione per proteggere le stringhe passate al database e un layout gradevole per la nostra pagina di accesso! Qui sotto puoi vedere il codice commentato per il nostro login.php file con il PHP appena aggiunto-

  Devi compilare un Nome utente e a Parola d'ordine!"; else // se il comando continua continuare // seleziona tutte le righe dalla tabella in cui il nome utente corrisponde a quello inserito dall'utente $ res = mysql_query (" SELECT * FROM 'users' WHERE 'username' = '". $ username. "'"); $ num = mysql_num_rows ($ res); // controlla se non c'era una corrispondenza se ($ num == 0) // se non mostra un messaggio di errore echo "
Il Nome utente hai fornito non esiste!
"; else // se c'è una corrispondenza continua controllo // seleziona tutte le righe in cui nome utente e password corrispondono a quelli inviati dall'utente $ res = mysql_query (" SELECT * FROM 'users' WHERE 'username' = '" . $ username. "'AND' password '='". $ password. "'"); $ num = mysql_num_rows ($ res); // controlla se non ci fosse una corrispondenza se ($ num == 0) / / se non viene visualizzato il messaggio di errore echo "
Il Parola d'ordine hai fornito non corrisponde a quello per quel nome utente!
"; else // se c'era controllo continua // dividi tutti i campi della riga corretta in un array associativo $ row = mysql_fetch_assoc ($ res); // controlla se l'utente non ha ancora attivato il suo account se ( $ row ['active']! = 1) // if not display error message echo "
Non hai ancora attivato il tuo account!
"; else // se li hanno registrati // imposta la sessione di accesso memorizzandoci id - usiamo questo per vedere se sono loggati o no $ _SESSION ['uid'] = $ row ['id'] ; // mostra messaggio echo "
hai effettuato il log in con successo!
"; // aggiorna il campo online a 50 secondi nel futuro $ time = date ('U') + 50; mysql_query (" UPDATE "users 'SET' online '='". $ time. "'WHERE' id ' = '". $ _ SESSION [' uid ']."' "); // li reindirizza all'intestazione della pagina usersonline ('Location: usersOnline.php');?>
Nome utente:
Parola d'ordine:
Registrati | Hai dimenticato il passaggio

La maggior parte di ciò è spiegata dal commento, ma una parte che non ho spiegato è il campo online. Quando si accede correttamente, abbiamo aggiornato il campo online a 50 secondi in anticipo. La funzione data ('U') ci dà un numero di secondi dal 1 gennaio 1970 00:00:00 GMT (epoca Unix). Ciò significa che la data ('U') non diminuirà mai, il valore aumenterà sempre. Se impostiamo il campo online a 50 secondi prima di adesso, quando il Utenti online pagina è caricata possiamo controllare per trovare tutti gli utenti in cui il valore online è maggiore del tempo in cui la pagina viene caricata, se questo è il caso, quindi visualizzare ciascuno dei loro nomi.

Ora sentiti libero di testare la tua pagina di accesso. Assicurati che tutti i controlli siano eseguiti correttamente e che una volta effettuato l'accesso con successo, verrai reindirizzato alla pagina online degli utenti non esistenti. Puoi anche controllare se ha aggiornato correttamente il campo online controllando la tabella degli utenti!



3. Creazione della pagina di registro

A che serve una pagina di accesso senza una pagina di registrazione? Non molto, quindi penso che sarà il prossimo passo da fare per noi. La creazione della pagina di registrazione sarà molto simile alla creazione della nostra pagina di accesso. Abbiamo bisogno di fare un controllo di base per vedere se il nome utente desiderato è già stato preso, ma non c'è nulla di nuovo che accade lì. Qui sotto puoi vedere il codice della pagina del registro commentato -

  Devi compilare tutti i file richiesti! "; Else // se tutti sono stati compilati continua controllo // Controlla se il nome utente desiderato è più di 32 o meno di 3 caratteri lunghi se (strlen ($ username)> 32 || strlen ($ username) < 3) //if it is display error message echo "
Il tuo Nome utente deve avere una lunghezza compresa tra 3 e 32 caratteri!
"; else // se non continua controllo // seleziona tutte le righe dalla tabella degli utenti in cui il nome utente registrato corrisponde al nome utente memorizzato $ res = mysql_query (" SELECT * FROM 'users' WHERE 'username' = '". $ nome utente. "'"); $ num = mysql_num_rows ($ res); // controlla se c'è una corrispondenza se ($ num == 1) // se sì il nome utente è preso in modo da visualizzare il messaggio di errore echo "
Il Nome utente hai scelto è già stato preso!
"; else // altrimenti continua a controllare // controlla se la password è inferiore a 5 o più di 32 caratteri se (strlen ($ password) < 5 || strlen($password) > 32) // se è visualizzato un messaggio di errore echo "
Il tuo Parola d'ordine deve avere una lunghezza compresa tra 5 e 32 caratteri!
"; else // else continua a controllare // controlla se la password e conferma la password corrispondono se ($ password! = $ passconf) // se non viene visualizzato il messaggio di errore echo"
Il Parola d'ordine hai fornito non corrisponde alla password di conferma!
"; else // altrimenti continua a controllare // Imposta il formato che vogliamo controllare all'indirizzo email $ checkemail =" /^[a-z0-9]+([_\\.-][a-z0- 9] +) * @ ([a-z0-9] + ([\ .-] [a-z0-9] +) *) + \\. [Az] 2, $ / i "; // controlla se i formati corrispondono se (! preg_match ($ checkemail, $ email)) // se non viene visualizzato il messaggio di errore echo "
Il E-mail non è valido, deve essere [email protected]!
"; else // se lo fanno, continua a controllare // seleziona tutte le righe dalla nostra tabella utenti in cui le e-mail corrispondono $ res1 = mysql_query (" SELECT * FROM 'users' WHERE 'email' = '". $ email." '"); $ num1 = mysql_num_rows ($ res1); // se il numero di corrispondenze è 1 se ($ num1 == 1) // l'indirizzo di posta elettronica fornito è preso in modo da visualizzare il messaggio di errore echo"
Il E-mail l'indirizzo che hai fornito è già stato preso
"; else // infine, altrimenti registrati lì account // ora del registro (unix) $ registerTime = date ('U'); // crea un codice per la nostra chiave di attivazione $ code = md5 ($ username). $ registerTime; // inserisce la riga nel database $ res2 = mysql_query ("INSERT INTO 'users' ('username', 'password', 'email', 'rtime') VALUES ('". $ username. "', ' ". $ password." ',' ". $ email." ',' ". $ registerTime." ') "); // invia l'e-mail con una e-mail contenente il link di attivazione all'indirizzo di posta elettronica fornito ($ email , $ INFO ['chatName']. 'Conferma registrazione', "Grazie per esserti registrato". $ Username. ", \ N \ nQui è il tuo link di attivazione.Se il link non funziona copia e incolla nel tuo barra degli indirizzi del browser. \ n \ nhttp: //www.yourwebsitehere.co.uk/activate.php? code = ". $ code, 'From: [email protected]'); // mostra il messaggio di successo echo "
Ti sei registrato con successo, per favore visita la tua casella di posta per attivare il tuo account!
";?>
Nome utente:
Parola d'ordine:
Conferma password:
E-mail:
Login | Hai dimenticato il passaggio

Nuove funzioni

Questo file contiene alcune cose nuove che potresti non avere familiarità con, quindi mi occuperò di tutto. Innanzitutto, la funzione strlen (), restituisce il numero di caratteri in una stringa che ci consente di verificare la lunghezza delle stringhe. Quindi la funzione preg_match (), controlla se la formattazione di una stringa corrisponde alla formattazione specificata (in questo caso un formato email). Infine, la funzione mail (), invia una email dal server a qualsiasi email di tua scelta, contenente tutto ciò che desideri. Dovresti salvare questo file come register.php

Ora puoi testare la tua pagina di registrazione, puoi vedere quando inserisci il tuo indirizzo email corretto riceverai un'email con un link di attivazione contenuto all'interno. Puoi anche vedere che una riga contenente i dati inseriti nel modulo viene inserita nella tabella degli utenti. Il valore di attivo è 0 mostrando che questo account non è stato ancora attivato!



4. Attiva la pagina del tuo account

Questa è solo una piccola pagina con pochissimo codice richiesto, ma è ancora molto importante e svolge un ruolo enorme in un sistema di accesso sicuro. La fonte per questa pagina è mostrata sotto - activate.php

  Sfortunatamente c'è stato un errore! "; Else // altro saggio continua il controllo // seleziona tutte le righe in cui gli account non sono attivi $ res = mysql_query (" SELECT * FROM 'users' WHERE 'active' = '0 '"); // loop attraverso questo script per ogni riga trovata non attiva while ($ row = mysql_fetch_assoc ($ res)) // controlla se il codice dalla riga nel database corrisponde a quello dell'utente se ($ code == md5 ($ row ['username']). $ row ['rtime']) // se attiva quindi lì account e visualizza il messaggio di successo $ res1 = mysql_query ("UPDATE" users 'SET' active '= '1' WHERE 'id' = '". $ Row [' id ']."' "); Echo"
Hai attivato correttamente il tuo account!
";?>

Ci sono due cose nuove in questo file, usiamo il metodo GET invece di POST e usiamo anche un ciclo while (). Il metodo get ottiene semplicemente i dati dalla barra degli indirizzi nella parte superiore del browser dell'utente (in questo caso il codice inviato con l'e-mail al loro indirizzo e-mail). Il ciclo while () sta perfezionando il controllo di più file di dati selezionati dal database (in questo caso per vedere se c'è una corrispondenza con i codici).

Panoramica così lontana

Fino ad ora avresti dovuto imparare molte cose nuove se sei nuovo in PHP e hai creato con successo metà del sistema di login. Le pagine completate finora sono -

  • style.css
  • functions.php
  • login.php
  • register.php
  • activate.php

Alcune funzioni utili utilizzate finora sono -

  • mysql_connect () - Connetti a un database mysql
  • mysql_select_db () - Seleziona il database con cui dovremmo lavorare
  • mysql_query () - Invia querys al database per ottenere, inserire o modificare dati
  • trim () - Taglia lo spazio bianco indesiderato all'inizio e alla fine di una stringa
  • strip_tags () - Rimuove i tag html e PHP da una stringa
  • addslashes () - Aggiunge le barre alla stringa s consentendo virgolette e contrassegni vocali da utilizzare in modo sicuro
  • strlen () - Ottieni il numero di caratteri in una stringa
  • preg_match () - La corrispondenza di Preg corrisponde alla formattazione di una stringa
  • mail () - Invia la posta dal server all'indirizzo email specificato
  • md5 () - Questo calcola l'hash md5 di una stringa


5. Hai dimenticato la tua password?

Il prossimo è la nostra pagina di password dimenticata. Se l'utente dimentica la sua password, possiamo inviarla via email ora sappiamo che ha fornito un indirizzo email reale a causa dell'attivazione. Quindi, senza ulteriori indugi ecco il codice commentato per forgot.php -

  Devi compilare il tuo E-mail indirizzo! "; else // else continua a controllare // imposta il formato per controllare l'email con $ checkemail =" /^[a-z0-9]+([_\\.-][a-z0-9 ] +) * @ ([a-z0-9] + ([\ .-] [a-z0-9] +) *) + \\. [az] 2, $ / i "; // verifica se l'e-mail non corrisponde al formato richiesto se (! preg_match ($ checkemail, $ email)) // se non viene visualizzato il messaggio di errore echo "
E-mail non è valido, deve essere [email protected]!
"; else // altrimenti continua a controllare // seleziona tutte le righe dal database in cui le e-mail corrispondono $ res = mysql_query (" SELECT * FROM 'users' WHERE 'email' = '". $ email."' "); $ num = mysql_num_rows ($ res); // controlla se il numero di righe corrispondenti è uguale a 0 se ($ num == 0) // se è visualizzato un messaggio di errore echo "
Il E-mail hai fornito non esiste nel nostro database!
"; else // altrimenti completa la funzione di passaggio dimenticato // dividi la riga in un array associativo $ row = mysql_fetch_assoc ($ res); // invia e-mail contenente la loro password al loro indirizzo email ($ email, 'Password dimenticata') , "Ecco la tua password:". $ Row ['password']. "\ N \ nRicerca di non perderlo di nuovo!", 'Da: [email protected]'); // mostra il messaggio di successo echo "
Una mail è stata inviata anche il tuo indirizzo email contenente la tua password!
";?>
E-mail:
Registrati | Accesso

Questa pagina non contiene nulla di nuovo quindi passerò meno tempo a guardarci sopra. Una cosa che voglio menzionare è che se non l'hai notato perché abbiamo incluso il nostro file css in ogni pagina, il layout che usiamo per ogni pagina è molto simile mantenendo un bel design intelligente nell'intero sito web.

La prossima e ultima pagina che faremo in questo tutorial sarà leggermente diversa. Questa pagina ha l'assegno per vedere se l'utente è loggato o meno, e in questo caso visualizza tutti gli utenti online in quel momento (o per essere precisi negli ultimi 50 secondi).



6. La pagina online degli utenti

Va bene così siamo arrivati ​​alla sezione del sito web per cui è necessario effettuare il login. Come ho detto prima, questo sarà leggermente diverso dagli altri a causa del fatto che dobbiamo verificare se l'utente è connesso o meno. Se non sono connessi e cercano di visualizzare la pagina, abbiamo alcune opzioni che possiamo fare. Il primo è che possiamo visualizzare un messaggio di errore che dice qualcosa sulla falsariga di "Devi essere loggato per vedere questa pagina!", Oppure possiamo reindirizzarli alla pagina di login. Per questo tutorial penso che userò il metodo del messaggio di errore.

Quindi ecco il usersOnline.php fonte della pagina -

  Devi essere loggato per usare questa funzione! "; Else // altrimenti continua la pagina // questo è fuori script di aggiornamento che dovrebbe essere usato in ogni pagina per aggiornare il tempo online degli utenti $ time = date ('U' ) +50; $ update = mysql_query ("UPDATE" users 'SET' online '=' ". $ Time." 'WHERE' id '=' ". $ _ SESSION ['uid']." '");?> 
Utenti online: '".date (' U ')."' "); // loop per ogni riga while ($ row = mysql_fetch_assoc ($ res)) // echo ogni nome utente trovato online con un trattino per dividerli echo $ row [ 'username'] ". - ";?>
Disconnettersi

Come ho già detto, puoi vedere che questa pagina è leggermente diversa. Non solo ci assicuriamo che abbiano effettuato l'accesso, ma aggiorniamo il tempo online mantenendo il campo online in anticipo rispetto all'orario corrente. Ogni volta che una pagina viene caricata con quello script, si aggiorna per metterli online. Ora abbiamo ancora una pagina finale da fare e poi abbiamo finito. Una volta che un utente ha effettuato l'accesso, deve essere in grado di disconnettersi!



logout.php

Questa deve essere considerata la pagina più semplice da fare, e sono sicuro che molti di voi sono contenti di sentire. Ora qui è il codice commentato per il logout.php file -

  Devi effettuare il login per disconnettersi! "; Else // se continua a controllare // update per impostare questo campo online degli utenti sull'ora corrente mysql_query (" UPDATE "users 'SET' online '='". date ('U'). "'WHERE' id '='". $ _ SESSION ['uid']. "'"); // distrugge tutte le sessioni annullando la sessione di accesso session_destroy (); // mostra il messaggio di successo echo "
Ti sei disconnesso con successo!
";?>

Penso che i commenti in questo file lo spieghino abbastanza, e penso che la tua conoscenza di PHP ora dovrebbe essere molto più alta e dovresti essere in grado di capire la maggior parte di questo ora.