LA CAMPANA

C'è chi ha letto questa notizia prima di te.
Iscriviti per ricevere gli ultimi articoli.
E-mail
Nome
Cognome
Come vuoi leggere The Bell
Niente spam

Tecnologia di sessione in PHP siamo in modo semplice memorizzazione di informazioni per un singolo utente del sito. Ad esempio: prodotti aggiunti al carrello, impostazioni di notifica, ecc. Alla prima richiesta del sito al server, nel browser viene memorizzato un cookie univoco iD sessione utente. L'identificatore, o il pacchetto di identificatore e indirizzo IP, identifica quindi l'utente. Può essere utilizzato per mantenere lo stato tra le richieste di pagina. Gli ID di sessione vengono solitamente inviati al browser tramite un cookie di sessione e vengono utilizzati per recuperare i dati di sessione disponibili.

Uso delle sessioni tecnologia semplice: PHP recupererà i dati della sessione esistente utilizzando l'identificatore passato (di solito da un file session biscotto), o se non è stato trasmesso nulla, verrà creata una nuova sessione. PHP popolerà il superglobale $ _SESSION con le informazioni sulla sessione dopo che la sessione è iniziata. Quando PHP esce, serializza automaticamente il contenuto del superglobal $ _SESSION e lo invia per l'archiviazione utilizzando un gestore di sessione per registrare la sessione.

PHP utilizza un gestore interno per impostazione predefinita file per salvare le sessioni, che è impostato nella variabile INI session.save_handler. Questo gestore salva i dati sul server nella directory specificata nella direttiva di configurazione session.save_path.

L'esempio più semplice di utilizzo di una sessione, ad esempio, che mostra il numero di visite di pagina per ogni utente:

Come è possibile il blocco della sessione?

C'è una nota sul sito web di php nella sezione della descrizione della sessione (http://php.net/manual/ru/session.examples.basic.php):

Sessioni che utilizzano file (per impostazione predefinita in PHP), blocca il file di sessione immediatamente all'apertura di una sessione con la funzione session_start () o indirettamente quando si specifica session.auto_start. Una volta bloccato, nessun altro script può accedere allo stesso file di sessione finché non viene chiuso al termine dello script o quando viene chiamata la funzione session_write_close ().

Molto probabilmente questo diventerà un problema per i siti che utilizzano attivamente AJAX ed effettuare più richieste simultanee. Il modo più semplice per risolvere questo problema è chiamare la funzione session_write_close () non appena vengono apportate tutte le modifiche richieste nella sessione, preferibilmente più vicino all'inizio dello script. È inoltre possibile utilizzare un altro meccanismo di sessione che supporta la concorrenza.

Recentemente, il problema del blocco delle sessioni è diventato più frequente. Ciò è in parte dovuto alla crescente complessità dei siti e alla necessità di eseguire più calcoli lato server, oltre che con una maggiore distribuzione AJAX... Purtroppo la logica dell'applicazione, soprattutto se complessa, non sempre limita efficacemente il tempo di blocco dei processi in competizione per la sessione. La situazione è aggravata dal fatto che 3-5 di questi client sono in grado di intasare rapidamente i lavoratori PHP con processi congelati e inattivi, a seguito dei quali il sito inizierà a emettere Errore 5XX .

L'esempio più semplice di blocco delle sessioni:

// solo per uno script ?>

Se apri questo file prima nella prima scheda e poi nella seconda, la seconda scheda attenderà fino al termine della prima. Cioè, infatti, la seconda scheda attenderà fino a quando la prima rilascia il file di sessione (che in questo caso particolare richiede 30 secondi). Questo problema ben descritto nel blog dell'azienda 1C-Bitrix su Habrahabr.

Quali opzioni esistono per risolvere questo problema

Per memorizzare le sessioni, puoi utilizzare database, come MySQL o PostgreSQL (che non è del tutto corretto, date le capacità della maggior parte dei database e la possibile velocità di lavoro in questo compito), Memcached (non garantisce la memorizzazione della sessione, potrebbe essere cancellata) e Redisin cui crediamo conservazione ottimale... In termini di velocità, non è inferiore a Memcached, ma allo stesso tempo può garantire la sicurezza dei dati.

E il vantaggio più importante Redis - quando si memorizzano le sessioni in esso, non vengono bloccate.

All'interno del nostro pannello di controllo (), puoi abilitare l'archiviazione delle sessioni in Redis per tutti i siti del tuo account. Per farlo, vai alla sezione " Siti web", quindi seleziona la casella -" Memorizza le sessioni di tutti i siti in Redis".

Materiali aggiuntivi

Sezioni

SSH

FTP

Applicazioni web

  • Panoramica dell'installazione dell'applicazione (ambiente virtuale Docker)

Diagnosi dei problemi

Domini

  • Cancellazione del nome di dominio nella zona .RU / .РФ di cui Beget è il registrar
  • Trasferimento dei diritti di amministrazione per il nome di dominio .RU / .РФ / .SU e le zone internazionali (Cambio dell'amministratore di dominio)

.
In questo articolo aggiungeremo alla nostra registrazione dai un'occhiatae- postaindirizzi, login e ripristino automatici password dimenticata ... Prima di iniziare la lezione, assicurati che la funzione sia in esecuzione sul tuo server mail ().

Cominciamo aggiungendo campi alla tabella « utenti» ... Abbiamo bisogno di un campo per memorizzare un indirizzo e-mail, un campo per lo stato dell'utente (0 - inattivo, 1 - attivato) e un campo con la data di registrazione.





Quindi devi modificare save_user.phpaggiungendo una verifica della correttezza dell'indirizzo e-mail e inviando una lettera di conferma della registrazione. La lettera contiene un collegamento con due variabili passate dal metodo get : login e codice generato, unico per ogni utente. Abbiamo bisogno del codice in modo che l'utente non possa attivare il suo account senza una lettera, e questo ci darà la sicurezza che l'indirizzo email inserito gli appartenga davvero. Aggiungiamo il seguente codice, dopo aver estratto i dati inviati dalle variabili globali:

If (isset ($ _ POST ["email"])) ($ email \u003d $ _POST ["email"]; if ($ email \u003d\u003d "") (unset ($ email);))
if (vuoto ($ login) o vuoto ($ password) o vuoto ($ code) o vuoto ($ email))
// aggiungi una variabile cone- postaindirizzo
// se l'utente non ha inserito un nome utente o una password, emettiamo un errore e interrompiamo lo script
{
exit ("Non hai inserito tutte le informazioni, torna indietro e compila tutti i campi!"); // interrompe l'esecuzione degli script
}
if (! preg_match ("/ [email protected]+ \\. (2,3) / i ", $ email)) // controlla l'indirizzo e-mail espressioni regolari per correttezza
(exit ("E-mail inserita non valida!");)

Nella richiesta di aggiunta di un nuovo utente è necessario aggiungere anche la data di registrazione. Se i dati sono stati inseriti con successo nel database e l'utente è registrato, è necessario inviare un messaggio all'indirizzo inserito:

// in caso contrario, salva i dati
$ result2 \u003d mysql_query ("INSERT INTO users (login, password, avatar, email, date) VALUES (" $ login "," $ password "," $ avatar "," $ email ", NOW ())");
// Controlla se ci sono errori
if ($ risultato2 \u003d\u003d "TRUE")
{
$ result3 \u003d mysql_query ("SELECT id FROM users WHERE login \u003d" $ login "", $ db); // recupera l'ID utente. Grazie a lui, avremo codice univoco attivazione, perché due identificatori identici non possono essere.
$ myrow3 \u003d mysql_fetch_array ($ risultato3);
$ attivazione \u003d md5 ($ myrow3 ["id"]). md5 ($ login); // il codiceattivazioneaccount. Crittografiamo l'identificatore e accediamo tramite la funzione md5. È improbabile che l'utente sia in grado di selezionare manualmente una tale combinazione tramite la barra degli indirizzi.
$ subject \u003d "Conferma registrazione"; //Soggetto del messaggio
$ message \u003d "Ciao! Grazie per esserti registrato su citename.ru \\ nIl tuo login:". $ login. "\\ n
Segui il link per attivare il tuo account: \\ nhttp: //localhost/test3/activation.php? Login \u003d ". $ Login." & Code \u003d ". $ Activation." \\ N Saluti, \\ n
Amministrazione citename.ru "; // contenuto del messaggio
mail ($ email, $ subject, $ message, "Content-type: text / plane; Charset \u003d windows-1251 \\ r \\ n"); // mandare un messaggio

Echo "E 'stata inviata una e-mail alla tua E-mail con un link per confermare la tua registrazione. Attenzione! Il link è valido per 1 ora. Pagina principale"; // parlando dell'email inviata all'utente
}

Messaggio inviato! Ora l'utente lo aprirà e seguirà il collegamento specificato alla pagina che controllerà il codice di attivazione. Dopo esserci assicurati che il codice sia corretto, confermiamo la registrazione modificando il valore del campo nel database attivazione da "0" a "1".

Crea un file activation.php

include ("bd.php"); // filebd. php dovrebbe essere nella stessa cartella di tutti gli altri, in caso contrario basta cambiare il percorso
$ result4 \u003d mysql_query ("SELECT avatar FROM users WHERE activation \u003d" 0 "AND UNIX_TIMESTAMP () - UNIX_TIMESTAMP (date)\u003e 3600"); // recupera gli avatar di quegli utenti che non hanno attivato il proprio account entro un'ora. Pertanto, devono essere rimossi dal database, così come i file dei loro avatar
if (mysql_num_rows ($ risultato4)\u003e 0) (
$ myrow4 \u003d mysql_fetch_array ($ risultato4);
fare
{
// rimuove gli avatar in un ciclo se non sono standard
if ($ myrow4 ["avatar"] \u003d\u003d "avatars / net-avatara.jpg") ($ a \u003d "Non fare nulla";)
altro (
scollega ($ myrow4 ["avatar"]); // elimina il file
}
}
while ($ myrow4 \u003d mysql_fetch_array ($ risultato4));
}
mysql_query ("DELETE FROM users WHERE activation \u003d" 0 "AND UNIX_TIMESTAMP () - UNIX_TIMESTAMP (date)\u003e 3600"); // elimina gli utenti dal database
if (isset ($ _ GET ["codice"])) ($ codice \u003d $ _ GET ["codice"];) //codice di conferma
altro
(exit ("Sei entrato nella pagina senza un codice di conferma!");) // se non specificatocodice, quindi diamo un errore
if (isset ($ _ GET ["login"])) ($ login \u003d $ _ GET ["login"];) // accedi per attivare
altro
(exit ("Sei entrato nella pagina senza effettuare il login!");) // se non hai specificato un login, viene visualizzato un errore
$ risultato \u003d mysql_query ("SELEZIONA id DA utenti DOVE login \u003d" $ login "", $ db); // recupera l'ID utente con il login fornito
$ attivazione \u003d md5 ($ myrow ["id"]). md5 ($ login); // crea lo stesso codice di conferma
if ($ attivazione \u003d\u003d $ codice) ( // confronta ottenuto daurl e il codice generato
mysql_query ("UPDATE users SET activation \u003d" 1 "WHERE login \u003d" $ login "", $ db); // se uguale, attiva l'utente
echo "La tua e-mail è stata verificata! Adesso puoi entrare nel sito usando il tuo nome utente! Home page";
}
else (echo "Errore! La tua email non è stata verificata! Home page";
// se ottenuto daurl e il codice generato non è uguale, quindi diamo un errore
}
?>

L'indirizzo e-mail è confermato, ora sappiamo che questo indirizzo appartiene questo utente, sarà possibile inviargli una password se l'utente la dimentica, o altre notifiche. Ma qual è la differenza tra utenti attivati \u200b\u200be utenti non attivati? Entrambi possono entrare nel sito, quindi, dobbiamo limitare l'accesso a coloro che non sono attivati. Apriamo il file testreg. php e aggiungi un'altra condizione nella query al database:

$ risultato \u003d mysql_query ("SELECT * FROM users WHERE login \u003d" $ login "AND password \u003d" $ password "AND activation \u003d" 1 "", $ db); // recupera dal database tutti i dati sull'utente con il login inserito
// abbiamo aggiunto "Eattivazione\u003d "1" ", ovvero l'utente verrà cercato solo tra quelli attivati. È auspicabile aggiungere questa condizione ad altri controlli simili per i dati utente.

Se l'utente dimentica la password, in tal caso è necessario visualizzare un collegamento a home page, con il quale può ripristinarlo, così come puoi immediatamente mettere una casella di controllo per il login automatico.

Accesso automatico.






Iscriviti ora


Hai dimenticato la password?

C'è un collegamento, ma nessun file. Scriviamo spedire_ passaggio. php... In esso chiederemo all'utente il proprio login e indirizzo e-mail. Se l'e-mail e il login inseriti sono nel database, li invieremo nuova password, se l'utente ha dimenticato quello vecchio, perché ci siamo assicurati durante la registrazione che l'indirizzo email sia valido.

if (isset ($ _ POST ["login"])) ($ login \u003d $ _POST ["login"]; if ($ login \u003d\u003d "") (unset ($ login);)) // inserire il login inserito dall'utente nella variabile $ login, se è vuota, quindi distruggere la variabile
if (isset ($ _ POST ["email"])) ($ email \u003d $ _POST ["email"]; if ($ email \u003d\u003d "") (unset ($ email);)) // inserisci l'e-mail inserita dall'utente, se è vuota, quindi elimina la variabile
if (isset ($ login) e isset ($ email)) ( // se esistono variabili richieste

Include ("bd.php");

$ risultato \u003d mysql_query ("SELEZIONA id DA utenti DOVE login \u003d" $ login "AND email \u003d" $ email "AND attivazione \u003d" 1 "", $ db); // comeseautentee- posta
$ myrow \u003d mysql_fetch_array ($ risultato);
if (vuoto ($ myrow ["id"]) o $ myrow ["id"] \u003d\u003d "") (
// se non è presente alcun utente attivato con questo login e questo indirizzo e-mail
exit ("Nessun utente con questo indirizzo e-mail è stato trovato in nessun database della CIA :) Pagina principale");
}
// se viene trovato un utente con questo login ed e-mail, è necessario generare una password casuale per lui, aggiornarla nel database e inviarla all'e-mail
$ datenow \u003d date ("YmdHis"); // recupera la data
$ nuova_password \u003d md5 ($ datenow); // crittografa la data
$ nuova_password \u003d substr ($ nuova_password, 2, 6); // estrae 6 caratteri dal cifrario, a partire dal secondo. Questa sarà la nostra password casuale. Successivamente, lo scriveremo nel database, crittografandolo come al solito.

$ nuova_password_sh \u003d strrev (md5 ($ nuova_password)). "b3p6f"; // criptato
mysql_query ("UPDATE users SET password \u003d" $ new_password_sh "WHERE login \u003d" $ login "", $ db); // aggiornatoinbase
// forma un messaggio

$ message \u003d "Ciao,". $ login. "! Abbiamo generato una password per te, ora puoi entrare nel sito citename.ru usandola. Dopo aver inserito, è consigliabile cambiarla. Password: \\ n". $ new_password; //Messaggio di testo
mail ($ email, "Recupero password", $ message, "Content-type: text / plane; Charset \u003d windows-1251 \\ r \\ n"); // spediremessaggio

Eco " Una lettera con una password è stata inviata alla tua e-mail. Sarai spostato dopo 5 secondi. Se non vuoi aspettare, clicca qui. "; // reindirizza l'utente
}
altro ( // se non sono stati ancora inseriti dati
eco "


Hai dimenticato la password?


Hai dimenticato la password?



Inserisci il tuo login:



Inserisci la tua email:






";
}
?>

Successivamente, faremo un accesso automatico. Funzionerà in questo modo: dopo aver effettuato correttamente l'accesso con la casella di controllo premuta, nel cookie verrà inserito auto \u003d “yes”. Se il server vede che auto \u003d "si" nel browser, avvierà una sessione e prenderà le variabili lì, nel cookie. Quindi le sessioni in esecuzione vengono confrontate con il database.

Apriamo testreg. php e aggiungi il codice dopo un accesso riuscito:

If (isset ($ _ POST ["save"])) (
// Se l'utente desidera che i suoi dati vengano salvati per l'accesso successivo, li salviamo nei cookie del suo browser

setcookie ("id", $ myrow ["id"], time () + 9999999);)
if (isset ($ _ POST ["autovhod"])) (
// Se l'utente desidera accedere automaticamente al sito
setcookie ("auto", "yes", time () + 9999999);
setcookie ("login", $ _POST ["login"], time () + 9999999);
setcookie ("password", $ _POST ["password"], time () + 9999999);
setcookie ("id", $ myrow ["id"], time () + 9999999);)

Ora devi avviare una sessione nel posto giusto se c'è un login automatico. Apriamo index.php e scrivi all'inizio della pagina:

// l'intera procedura funziona sulle sessioni. È in esso che i dati dell'utente vengono memorizzati mentre è sul sito. È molto importante eseguirli all'inizio della pagina !!!
session_start ();
include ("bd.php"); // Il file bd.php deve essere nella stessa cartella di tutti gli altri, se non lo è, cambia semplicemente il percorso
if (isset ($ _ COOKIE ["auto"]) e isset ($ _ COOKIE ["login"]) e isset ($ _ COOKIE ["password"]))
{// se ci sono variabili richieste
if ($ _COOKIE ["auto"] \u003d\u003d "sì") ( // se l'utente desidera accedere automaticamente, avviare le sessioni
$ _SESSION ["password"] \u003d strrev (md5 ($ _ COOKIE ["password"])). "B3p6f"; // nei cookie, la password non era crittografata, ma nelle sessioni di solito archiviamo crittografata
$ _SESSION ["login"] \u003d $ _ COOKIE ["login"]; // sessionea partire dalaccesso
$ _SESSION ["id"] \u003d $ _ COOKIE ["id"]; //ID utente
}
}

Adesso anche l'uscita non ci aiuterà a cambiare utente! IN uscita. php vengono eliminate le sessioni, che sono ancora create in data indice. phpgrazie ai cookie che vengono conservati per molto tempo! Ripariamo comunque il file uscita. php, altrimenti non è funzionante in caso di login automatico. Hai solo bisogno di cancellare il login automatico nel cookie, dopo aver rimosso le variabili dalla sessione:

Setcookie ("auto", "", time () + 9999999); // cancella il login automatico

È anche necessario aggiungere a aggiornare_ utente. php dopo aver aggiornato il login nella sessione:

$ _SESSION ["login"] \u003d $ login; // Aggiorna il login nella sessione
if (isset ($ _ COOKIE ["login"])) (
setcookie ("login", $ login, time () + 9999999); // In aggiornamentoaccessoinbiscotti
}

E lo stesso con la password

$ result4 \u003d mysql_query ("UPDATE users SET password \u003d" $ password "WHERE login \u003d" $ old_login "", $ db); // aggiornareparola d'ordine
if ($ risultato4 \u003d\u003d "TRUE") ( // se true, aggiornalo nella sessione
$ _SESSION ["password"] \u003d $ password;
if (isset ($ _ COOKIE ["password"])) (
setcookie ("password", $ _ POST ["password"], time () + 9999999); // In aggiornamentoparola d'ordineinbiscotti, seessic'è
}

Quindi è tutto. Spero tu riesca! In bocca al lupo!

Sessioni è un meccanismo che permette di memorizzare determinati dati sul server, unici per ogni utente. I lettori particolarmente attenti troveranno somiglianze con biscotto... E, in generale, sono la stessa cosa. Tuttavia, il punto chiave: i dati vengono memorizzati non nel browser dell'utente, ma in un file speciale sul serveril cui nome è univoco per ogni utente. Un unico iD sessione PHP archiviato già in biscotto.

Andiamo con te lavoriamo con sessioni in PHP... E iniziamo con funzioni session_start ()... Questa funzione fa quanto segue: se l'utente ha effettuato il login per la prima volta, crea un identificatore univoco e lo scrive in biscottoe crea anche un nuovo file che è di nuovo univoco per l'utente. Se l'utente ha già effettuato l'accesso, il server legge il valore dell'identificatore univoco da biscotto e, in conformità con esso, accede al file di sessione richiesto. Da questo file PHP legge tutti i dati e li inserisce in un array $ _SESSION... Scriviamo un semplice codice in cui scriviamo una variabile nella sessione, oppure lo leggiamo se è già stato scritto.

session_start ();
if (isset ($ _ SESSION ["name"])) $ name \u003d $ _SESSION ["name"];
altro $ _SESSION ["name"] \u003d "15St";
echo $ nome;
?>

Per prima cosa, chiamiamo funzione session_start ()che ho descritto sopra. Quindi controlliamo se la variabile esiste " nome"nella sessione. Se esiste, leggiamo i dati da esso e li scriviamo in una variabile nome... Se non esiste (ovvero, l'utente è venuto per la prima volta), imposta la variabile " nome"nel valore della sessione" 15St.". La riga successiva mostra il valore della variabile $ nome... Ovviamente la prima volta che inizi vedrai una riga vuota, ma la seconda vedrai la riga " 15St."letto dalla sessione.

Ti consiglio ora di inserire nella barra degli indirizzi: " javascript: document.cookie"(inserisci nella stessa scheda in cui hai eseguito lo script). Di conseguenza, vedrai qualcosa di simile al seguente:" PHPSESSID \u003d". Solo significato PHPSESSID ed è quindi un identificatore univoco.

E per rendere tutto completamente chiaro, ti consiglio anche di trovare file di sessione... Se stai usando Denwer, quindi si trova nella cartella " tmp". Guarda i file che iniziano con" sess_"- questi sono i veri file di sessione... Puoi aprirli in un semplice blocco note.

Un'altra proprietà molto importante è temporalità delle sessioni in PHP... Allora se biscotto memorizzati fino a quando non vengono cancellati dal browser. E il browser non li elimina mai per impostazione predefinita. Quella sessione viene archiviata all'ora specificata in impostazioni PHP... Per impostazione predefinita, lo è 15 minuti. Cioè, se usi autenticazione basata sulla sessionepoi dopo 15 minuti inazione utente, dovrà accedere nuovamente. Ovviamente va bene, perché se l'utente dimentica " Esci", allora non accadrà nulla di male. Un utente malintenzionato non sarà in grado di utilizzare l'account utente. Inoltre, se utilizzo dei cookies possono essere rubati, sostituiti nel tuo browser e, di conseguenza, l'aggressore è autorizzato con i dati di qualcun altro, senza nemmeno conoscere la password. E non sarai in grado di rubare la sessione, poiché tutti i parametri sono memorizzati sul server e non sarai in grado di scoprirli.

Pertanto, prova principalmente nella tua pratica utilizzare le sessionipiuttosto che puro biscotto.

E, infine, voglio mettere in guardia su molto un errore comune... Non inviare mai dati ai browser prima utilizzando la funzione session_start ()altrimenti genererà un errore. Cioè, non puoi scrivere in questo modo:

echo "Hello";
session_start ();
?>

Si verificherà un errore durante l'esecuzione di questo script. La stessa regola era valida con biscotto (funzione setcookie ()). Quindi penso che qui sia tutto chiaro.

Quanto a sessioni in PHP, quindi, ovviamente, possono essere utilizzati per memorizzare statistiche, autenticazioni, impostazioni personali dell'utente e altre cose simili.

Impareremo a fare una semplice autenticazione dell'utente sul sito. Il sito può avere pagine solo per utenti autorizzati e funzioneranno completamente se aggiungiamo loro il nostro blocco di autenticazione. Per crearlo, hai bisogno di un database MySQL. Può avere 5 colonne (minimo) o più se desideri aggiungere le informazioni sull'utente. Chiamiamo il database "Userauth".

Creiamo i seguenti campi al suo interno: ID per il conteggio del numero di utenti, UID per il numero di identificazione univoco dell'utente, Username per il nome utente, Email per il suo indirizzo e-mail e Password per la password. Puoi utilizzare il database che hai già per autorizzare l'utente, solo che, come nel caso del nuovo database, crea al suo interno la seguente tabella.

Codice MySQL

CREATE TABLE `users` (` ID` int (11) NOT NULL AUTO_INCREMENT, `UID` int (11) NOT NULL,` Username` text NOT NULL, `Email` text NOT NULL,` Password` text NOT NULL, PRIMARY KEY (`ID`)) ENGINE \u003d MyISAM DEFAULT CHARSET \u003d utf8 AUTO_INCREMENT \u003d 1;

Ora creiamo il file "sql.php". È responsabile della connessione al database. Questo codice crea innanzitutto variabili per il server e l'utente quando si connette al server. Secondo, selezionerà il database, in questo caso "USERAUTH". Questo file deve essere connesso a "log.php" e "reg.php" per accedere al database.

Codice PHP

// Il tuo nome utente MySQL $ pass \u003d "redere"; // password $ conn \u003d mysql_connect ($ server, $ user, $ pass); // connettersi al server $ db \u003d mysql_select_db ("userauth", $ conn); // seleziona database if (! $ db) ( // se non è possibile selezionare il database echo "Spiacenti, errore: (/\u003e"; // Mostra il messaggio di errore Uscita (); // Consente ad altri script PHP di funzionare } ?>

La prossima è la pagina di login, chiamiamola "login.php". Innanzitutto, controlla i dati inseriti per errori. La pagina ha campi per nome utente, password, un pulsante di invio e un collegamento di registrazione. Quando l'utente fa clic sul pulsante "Accedi", il modulo verrà elaborato dal codice dal file "log.php", quindi il sistema effettuerà il login.

Codice PHP

0) { // se sono presenti errori di sessione $ err \u003d "

"; // Avvia una tabella foreach ($ _SESSION [" ERRMSG "] come $ msg) ( // riconosce ogni errore $ err. \u003d " "; // lo scrive in una variabile ) $ err. \u003d "
". $ msg."
"; // chiudi la tabella unset ($ _SESSION ["ERRMSG"]); // elimina la sessione } ?> Modulo di accesso
Nome utente
Parola d'ordine
registrazione

Quindi scriviamo uno script per accedere al sistema. Chiamiamolo "log.php". Ha una funzione per ripulire i dati di input dall'iniezione SQL che può rovinare lo script. In secondo luogo, ottiene i dati del modulo e lo convalida. Se l'input è corretto, lo script invia l'utente alla pagina degli utenti autorizzati, in caso contrario imposta gli errori e invia l'utente alla pagina di login.

Codice PHP

// avvia la sessione per la registrazione funzione Fix ($ str) (// cancella i campi $ str \u003d trim ($ str); if (get_magic_quotes_gpc ()) ($ str \u003d stripeslashes ($ str);) // array per memorizzare gli errori $ errflag \u003d false; // flag di errore $ username \u003d Fix ($ _ POST ["username"]); //Nome utente $ password \u003d Fix ($ _ POST ["password"]); // password) // controlla la password if ($ password \u003d\u003d "") ($ errmsg \u003d "Password mancante"; // errore $ errflag \u003d true; // solleva il flag in caso di errore) // se è impostato il flag di errore, reindirizza al modulo di registrazione // registra gli errori session_write_close (); // chiudi la sessione // reindirizzare Uscita (); ) // interroga il database $ qry \u003d "SELEZIONA * DA` utenti` WHERE` Username` \u003d "$ nomeutente" AND` Password` \u003d "". md5 ($ password). "" "; $ risultato \u003d mysql_query ($ qry); // controlla se la richiesta è andata a buon fine (se ci sono dati su di essa) if (mysql_num_rows ($ result) \u003d\u003d 1) (while ($ row \u003d mysql_fetch_assoc ($ result)) ($ _SESSION ["UID"] \u003d $ row ["UID"]; // ottiene l'UID dal database e lo inserisce nella sessione $ _SESSION ["USERNAME"] \u003d $ username; // imposta se il nome utente corrisponde alla sessione session_write_close (); // chiudi la sessione header ("location: member.php"); // reindirizzare )) else ($ _SESSION ["ERRMSG"] \u003d "Nome utente o password non validi"; // errore session_write_close (); // chiudi la sessione header ("location: login.php"); // reindirizzare Uscita (); )?\u003e

Creiamo una pagina di registrazione, chiamiamola "register.php". È simile alla pagina di accesso, solo che ha pochi campi in più, e invece di un collegamento di registrazione, un collegamento a login.php nel caso in cui l'utente abbia già un account.

Codice PHP

0) { // se sono presenti errori di sessione $ err \u003d "

"; // inizio della tabella foreach ($ _SESSION [" ERRMSG "] come $ msg) ( // imposta ogni errore $ err. \u003d " "; // li scrive in una variabile ) $ err. \u003d "
". $ msg."
"; // fine della tabella non impostata ($ _SESSION [" ERRMSG "]); // distrugge la sessione } ?> Modulo di registrazione
Nome utente
E-mail
Parola d'ordine
Ripeti password
ho un account

Ora creiamo uno script di registrazione nel file "reg.php". Includerà "sql.php" per connettersi al database. Utilizza la stessa funzione dello script di accesso per cancellare il campo di input. Le variabili sono impostate per possibili errori... Next è una funzione per creare un identificatore univoco che non è mai stato fornito prima. Quindi i dati vengono recuperati dal modulo di registrazione e convalidati. Verifica che l'indirizzo e-mail sia in formato desideratoe anche se la password è stata reinserita correttamente. Lo script verifica quindi se nel database è presente un utente con lo stesso nome e, in tal caso, segnala un errore. Infine, il codice aggiunge l'utente al database.

Codice PHP

// avvia la sessione per la registrazione funzione Fix ($ str) (// cancella i campi $ str \u003d @trim ($ str); if (get_magic_quotes_gpc ()) ($ str \u003d stripeslashes ($ str);) return mysql_real_escape_string($ str); ) $ errmsg \u003d array (); // array per la memorizzazione degli errori $ errflag \u003d false; // flag di errore $ UID \u003d "12323543534523453451465685454"; // ID univoco $ username \u003d Fix ($ _ POST ["username"]); //Nome utente $ email \u003d $ _POST ["email"]; // Email $ password \u003d Fix ($ _ POST ["password"]); // password $ rpassword \u003d Fix ($ _ POST ["rpassword"]); // ripeti password // controlla il nome utente if ($ nomeutente \u003d\u003d "") ($ errmsg \u003d "Nome utente mancante"; // errore $ errflag \u003d true; // solleva il flag in caso di errore ) // controlla Email se (! eregi ("^ [_ a-z0-9 -] + (\\. [_ a-z0-9 -] +) * @ + (\\. +) * (\\. (2,3 )) $ ", $ email)) (// deve corrispondere al formato: [email protected] $ errmsg \u003d "Email non valida"; // errore $ errflag \u003d true; // solleva il flag in caso di errore } // controlla la password if ($ password \u003d\u003d "") ($ errmsg \u003d "Password mancante"; // errore $ errflag \u003d true; // solleva il flag in caso di errore } // verifica la ripetizione della password if ($ rpassword \u003d\u003d "") ($ errmsg \u003d "Password ripetuta mancante"; // errore $ errflag \u003d true; // solleva il flag in caso di errore } // controlla se la password è valida if (strcmp ($ password, $ rpassword)! \u003d 0) ($ errmsg \u003d "Le password non corrispondono"; // errore $ errflag \u003d true; // solleva il flag in caso di errore } // controlla se il nome utente è gratuito if ($ username! \u003d "") ($ qry \u003d "SELECT * FROM` users` WHERE` Username` \u003d "$ username" "; // MySQL query $ result \u003d mysql_query ($ qry); if ($ result) (if (mysql_num_rows ($ risultato)\u003e 0) ( // se il nome è già in uso $ errmsg \u003d "Nome utente già in uso"; // messaggio di errore $ errflag \u003d true; // solleva il flag in caso di errore ) mysql_free_result ($ risultato); )) // se i dati non hanno superato la convalida, reindirizza al modulo di registrazione if ($ errflag) ($ _SESSION ["ERRMSG"] \u003d $ errmsg; // messaggio di errore session_write_close (); // chiudi la sessione header ("location: register.php"); // reindirizzare Uscita (); ) // aggiunge dati al database $ qry \u003d "INSERT INTO` userauth` .users` (` UID`, `Username`,` Email`, `Password`) VALORI (" $ UID "," $ username "," $ email "," ". md5 ($ password). "") "; $ risultato \u003d mysql_query ($ qry); // controlla se la richiesta di aggiunta è andata a buon fine if ($ risultato) (echo "Grazie per esserti registrato,". $ username. ". Effettua il login qui"; exit ();) else (die (" Errore, contattare più tardi ");)?\u003e

È inoltre necessario creare uno script per disconnettere l'utente dal sistema. Termina la sessione per l'utente con l'identificativo e il nome univoci forniti, quindi reindirizza l'utente alla pagina di accesso.

Codice PHP

Infine, lo script "auth.php" può essere utilizzato per rendere le pagine disponibili solo agli utenti autorizzati. Controlla i dettagli di accesso e, se corretti, consente all'utente di visualizzare le pagine e, in caso contrario, chiede di accedere. Inoltre, se qualcuno tenta di hackerare il sito creando una delle sessioni, verrà interrotto, come nel caso generale.

Codice PHP

Una delle condizioni nel codice di cui sopra è l'oggetto della domanda in.

Il seguente codice deve essere inserito nella pagina per gli utenti autorizzati, si chiama, ad esempio, "member.php", ma il tuo può essere chiamato come preferisci.

Codice PHP

Sei autorizzato ad accedere a questa pagina. Esci ( )

L'autenticazione dell'utente è pronta!

LA CAMPANA

C'è chi ha letto questa notizia prima di te.
Iscriviti per ricevere gli ultimi articoli.
E-mail
Nome
Cognome
Come vuoi leggere The Bell
Niente spam