La campana.

Ci sono quelli che hanno letto questa notizia prima di te.
Iscriviti per ricevere articoli freschi.
E-mail
Nome
Cognome
Come vuoi leggere la campana
Senza spam

Tecnologia di sessione B. PHP. siamo modo semplice Archiviazione di informazioni per l'utente di un singolo utente. Ad esempio: beni aggiunti al cestello della spesa, le impostazioni di notifica, ecc. Quando il sito viene richiesto per la prima volta al server, il browser viene salvato nei cookie unici identificatore di sessione Utente. Quindi l'identificatore o il grappolo dell'identificatore con l'indirizzo IP identifica l'utente. Questo può essere utilizzato per salvare lo stato tra le richieste delle pagine. Gli identificatori di sessioni vengono solitamente inviati al browser attraverso il cookie di sessione e vengono utilizzati per ottenere i dati della sessione disponibili.

Le sessioni sono utilizzate tecnologia semplice: PHP riceverà i dati della sessione esistente utilizzando l'identificatore trasmesso (di solito dalla sessione biscotto), O, se nulla è stato superato nulla, verrà creata una nuova sessione. PHP riempirà la variabile SuperGlobal $ _Session per le informazioni sulla sessione dopo che la sessione è in esecuzione. Quando PHP completa, serializza automaticamente il contenuto della variabile $ _Session SuperGlobal e invia per salvare utilizzando il gestore di sessione per registrare la sessione.

Per impostazione predefinita, PHP utilizza il gestore interno file. Per salvare le sessioni, che è installato nella sessione.Save_Handler INI Variabile. Questo gestore salva i dati sul server nella directory specificata nella Direttiva Session.Save_Path.

L'esempio più semplice di utilizzare la sessione, ad esempio, l'uscita del numero di contatti alla pagina per ciascun utente:

Come possono le sessioni sono possibili

Sul sito Web PHP nella sessione Descrizione Sezioni C'è una nota (http://php.net/manual/ru/session.examples.basic.php):

Sessioni utilizzando file (predefinito in PHP.), Blocca immediatamente il file di sessione quando la sessione sta aprendo la funzione Session_Start () o indirettamente quando si specifica la sessione .AUTO_START. Dopo il blocco, nessun altro script può accedere allo stesso file di sessione finché non viene chiuso o quando lo script è completato o quando viene chiamata la funzione Session_Write_CLose ().

Molto probabilmente sarà un problema per i siti che usano attivamente Ajax. E fare diverse richieste simultanee. Il modo più semplice per risolvere questo problema sarà la chiamata della funzione Session_Write_CLose () immediatamente non appena vengono effettuate tutte le modifiche richieste nella sessione, preferibilmente più vicina all'inizio dello script. È inoltre possibile utilizzare un altro meccanismo di sessione che supporta l'accesso competitivo.

Recentemente, il problema che blocca le sessioni sta diventando più frequente. Questo è in parte dovuto alla complicazione dei siti e dalla necessità di produrre più calcoli sul server più forte, nonché con una grande distribuzione Ajax.. Sfortunatamente, la logica dell'applicazione non è sempre, specialmente se è complicata, consente di limitare efficacemente il tempo di bloccare i processi concorrenti. La situazione è aggravata dal fatto che 3-5 tali clienti sono in grado di segnare rapidamente appeso e inattivo in anticipo di processi di vertica PHP, risultando nel sito inizierà a emettere Errore 5xx. .

L'esempio più semplice delle sessioni di blocco:

// solo per uno script ?>

Se apri prima questo file nella prima scheda, quindi nel secondo - la seconda scheda attenderà finché il primo si trasforma nel primo. Questo è, infatti, la seconda scheda attenderà fino al primo il primo non rilascia il file di sessione (che occupa in un caso particolare di 30 secondi). Questo problema Ben descritto nel blog dell'azienda 1c-bitrix. su habrahabr.

Quali opzioni per risolvere questo problema esistono

È possibile utilizzare il database per la memorizzazione di sessioni Mysql. o Postgresql. (che non è giusto, data le possibilità della maggior parte dei database e la possibile velocità di lavoro in questo compito), Memcached. (non garantisce lo stoccaggio della sessione, è possibile rimuoverlo) e Redis.noi consideriamo stoccaggio ottimale. A velocità, non è inferiore a Memcached, ma può garantire la sicurezza dei dati.

E il vantaggio più importante Redis. - Se conservato in esso, le sessioni non sono bloccate.

All'interno del nostro Pannello di controllo (), è possibile abilitare le sessioni di archiviazione in Redis per tutti i siti sul conto. Per fare questo, vai alla sezione " Siti", quindi celebrare un segno di spunta -" Sessioni del negozio di tutti i siti in Redis".

Materiali aggiuntivi

Sezioni

Ssh.

FTP.

Applicazioni web

  • Informazioni generali di installazione dell'applicazione (Ambiente virtuale Docker)

Diagnosi dei problemi

Domini

  • Cancellazione del nome del dominio in zona.ru / .rf per il quale Berget è un cancelliere
  • Trasferimento del nome di dominio Amministrazione Diritti.RU / .RF / .SU e Zone internazionali (Domain Domain Domain)

.
In questo articolo aggiungeremo alla nostra registrazione dai un'occhiatae.- mailindirizzi, login automatico e restauro ha dimenticato la password . Prima di procedere con la lezione, assicurarsi di avere una funzione sul server posta ().

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





Quindi devi essere corretto salva_user.php.Aggiungendo la verifica della correttezza dell'indirizzo e-mail e inviando una lettera per confermare la registrazione. La lettera contiene un collegamento con due variabili trasmesse dal metodo GET : Accedi e generati, unici per ogni utente, codice. Il codice di cui abbiamo bisogno che l'utente non può attivare il suo account senza una lettera, e questo ci darà fiducia che l'indirizzo post introdotto sia davvero appartenente a lui. Aggiungi il seguente codice dopo l'esecuzione dei dati dalle variabili globali:

IF (ISSET ($ _ POST ["Email"]))) ($ Email \u003d $ _Post ["Email"]; IF ($ Email \u003d\u003d "") (UNSSET ($ e-mail);))
Se (vuoto ($ login) o vuoto ($ password) o vuoto ($ codice) o vuoto ($ e-mail))
// Aggiungi una variabile cone.- mailindirizzo
// Se l'utente non ha inserito un login o una password, quindi forniamo un errore e interrompiamo lo script
{
Esci ("Hai inserito non tutte le informazioni, torna indietro e compila tutti i campi!"); // Avvia l'esecuzione di scenari
}
Se (! preg_match ("/ [Email protetto]+ \\. (2.3) / I ", $ e-mail)) // Controlla gli indirizzi e-mail espressioni regolari Correttezza
(Esci ("E-mail non è corretta!");)

La richiesta di aggiunta di un nuovo utente deve essere affrontata e la data di registrazione. Se i dati vengono inseriti correttamente nel database e l'utente è registrato, è necessario inviare un messaggio all'indirizzo:

// Se no, salviamo i dati
$ Result2 \u003d mysql_query ("Inserisci negli utenti (accesso, password, avatar, e-mail, data) (" $ login "," $ password "," $ avatar "," $ Email ", ora ())") ;
// controlla se ci sono errori
Se ($ Result2 \u003d\u003d "TRUE")
{
$ Result3 \u003d mysql_query ("Seleziona ID dagli utenti in cui Login \u003d" $ Login "", $ DB); // Rimuovere l'ID utente. Grazie a lui lo faremo codice unico Attivazione, perché due identificatori identici non possono essere.
$ Myrow3 \u003d mysql_fetch_array ($ risultato3);
$ Attivazione \u003d MD5 ($ MyRow3 ["ID"]). MD5 ($ login); // il codiceattivazioneaccount. Immettere l'identificativo e il login della funzione MD5. È improbabile che una combinazione dell'utente sia in grado di farcela manualmente manualmente attraverso la barra degli indirizzi.
$ soggetto \u003d "Conferma della registrazione"; //Soggetto del messaggio
$ MESSAGE \u003d "Ciao! Grazie per la registrazione su citename.ru \\ nvas Login:". $ Login. "\\ N
Segui il link per attivare il tuo account: \\ Nhttp: //localhost/test3/activation.php? Login \u003d ". $ Login." & Code \u003d ". $ Attivazione." \\ NC rispetto, \\ N
Citename.ru amministrazione "; // Contenuto pubblicato
Mail ($ e-mail, $ soggetto, $ messaggio, "Tipo di contenuto: testo / piano; charset \u003d windows-1251 \\ r \\ n"); // Mandare un messaggio

Echo "Sei inviato alla lettera di posta elettronica con una solarizzazione, per confermare la registrazione. Attenzione! Il collegamento è valido per 1 ora. Pagina principale"; // stiamo parlando della lettera inviata dall'utente
}

Messaggio inviato! Ora l'utente lo aprirà e vai al link indicato alla pagina che controllerà il codice di attivazione. Assicurarsi che il codice sia fedele, confermiamo la registrazione, modificando il valore del campo nel database attivazione. Con "0" a "1".

Creare un file. attivazione.php.

Includere ("bd.php"); // Filebd.. pHP. deve essere nella stessa cartella di tutti gli altri, se non lo è, basta cambiare la strada
$ Risultato4 \u003d mysql_query ("Seleziona Avatar dagli utenti in cui Attivazione \u003d" 0 "e UNIX_TIMESTAPP () - UNIX_TIMESTAPP (data)\u003e 3600); // Rimuovere gli avatar di tali utenti che non hanno attivato il loro account entro un'ora. Pertanto, devono essere rimossi dalla base, così come i file dei loro avatar
Se (mysql_num_rows ($ Result4)\u003e 0) (
$ Myrow4 \u003d mysql_fetch_array ($ Risultato4);
fare.
{
// Rimuovere gli avatar nel ciclo se non sono standard
Se ($ MyRow4 ["Avatar"] \u003d\u003d "avatar / net-avatara.jpg") ($ a \u003d "Non fare nulla";)
ALTRO (
Scollese ($ myrow4 ["avatar"]); // Elimina il file
}
}
While ($ myrow4 \u003d mysql_fetch_array ($ Result4));
}
Mysql_query ("Elimina dagli utenti dove attivazione \u003d" 0 "e unix_timestamp () - UNIX_TIMESTAPP (data)\u003e 3600); // Elimina utenti dalla base
se (ISSET ($ _ Ottenere ["Codice"])) ($ codice \u003d $ _ ottenere ["codice"];) //codice di conferma
ALTRO.
(Esci ("Sei andato alla pagina senza codice di conferma!");) // se non specificatocodice., quindi rilasciare un errore
IF (ESSET ($ _ Ottieni ["Login"])) ($ Login \u003d $ _ Ottieni ["Login"];) // Accedi per attivare
ALTRO.
(Esci ("Sei andato alla pagina senza login!");) // Se non si specifica il login, quindi forniamo un errore
$ Risultato \u003d mysql_query ("Seleziona ID dagli utenti in cui Login \u003d" $ Login "", $ dB); // Rimuovere l'ID utente con questo login
$ Attivazione \u003d MD5 ($ mirow [ID "]). MD5 ($ login); // Creare lo stesso codice di conferma
Se ($ attivazione \u003d\u003d $ codice) ( // Confronta il risultante dauRL e codice generato
Mysql_query ("Aggiorna utenti imposta attivation \u003d" 1 "dove login \u003d" $ login "", $ db); // Se sei uguale, quindi attivare l'utente
Echo "La tua e-mail è confermata! Ora puoi andare al sito sotto il tuo login! Home page";
}
Errore (echo "! La tua e-mail non è confermata! Home";
// se risultante dauRL e il codice generato non è uguale, quindi forniamo un errore
}
?>

L'indirizzo e-mail è confermato, ora sappiamo che questo indirizzo è di proprietà questo utenteÈ possibile inviare una password ad essa se l'utente lo dimenticherà o altre notifiche. Ma qual è la differenza tra gli utenti attivati, da non attivati? E quelli e altri possono andare al sito, quindi, dobbiamo limitare l'accesso a non attivato. Apri il file testReg.. pHP. E aggiungi un'altra condizione nella query al database:

$ Risultato \u003d mysql_query ("Seleziona * dagli utenti in cui login \u003d" $ Login "e password \u003d" $ password "e attivo \u003d" 1 "", $ dB); // Rimuovere tutti i dati sull'utente dal login dal database.
// Abbiamo completato "E.attivazione.\u003d "1", cioè, l'utente verrà cercato solo tra attivato. È consigliabile aggiungere questa condizione ad altri assegni di dati utente simili.

Se l'utente dimenticherà la password, quindi per un caso in cui devi ritirare un collegamento a pagina principalePer il quale può ripristinarlo, così come puoi inserire immediatamente una casella di controllo per il login automatico.

Ingresso automatico






Registrati


Hai dimenticato la password?

C'è un link, ma non c'è file. Scriviamo spedire._ passaggio. pHP.. In esso chiediamo all'erogazione dell'utente e all'indirizzo e-mail. Se l'e-mail e l'accesso inseriti è nel database, lo invieremo ad esso nuova passwordSe l'utente ha dimenticato il vecchio, perché eravamo convinti quando si registrano che l'indirizzo email è valido.

se (ISSET ($ _ POST ["LOGIN"]))) ($ LOGIN \u003d $ _POST ["LOGIN"]; IF ($ LOGIN \u003d\u003d "") (UNSET ($ LOGIN);)) // entriamo nell'utente inserito dall'utente nella variabile di accesso $, se è vuota, quindi distruggiamo la variabile
IF (ISSET ($ _ POST ["Email"]))) ($ Email \u003d $ _Post ["Email"]; IF ($ Email \u003d\u003d "") (UNSSET ($ e-mail);)) // Abbiamo inserito l'utente e-mail inserito dall'utente, se è vuoto, quindi distruggiamo la variabile
IF (ESSET ($ LOGIN) e ISSET ($ e-mail)) ( // Se ci sono variabili necessarie

Includere ("bd.php");

$ Risultato \u003d mysql_query ("Seleziona ID dagli utenti in cui Login \u003d" $ Login "ed e-mail \u003d" $ e-mail "e attivo \u003d" 1 "", $ dB); // comemenzognaw.utentee.- maschio
$ myrow \u003d mysql_fetch_array ($ risultato);
se (vuoto ($ mirow ["id]) o $ mirow [id"] \u003d\u003d "") (
// Se non vi è un utente attivato con tale accesso e indirizzo e-mail
Exit ("L'utente con un tale indirizzo e-mail non è stato rilevato in qualsiasi database CIA :) La pagina principale");
}
// Se l'utente viene trovato con tale accesso e e-mail, è necessario generare una password casuale per lui, aggiornarla nel database e inviare a e-mail
$ DaTENOW \u003d data ("YMDHIS"); // rimuovi la data
$ New_password \u003d MD5 ($ dateNow); // crittografa la data
$ New_password \u003d Substr ($ New_password, 2, 6); // Rimuovere 6 caratteri dal cifrario dal secondo. Questa sarà la nostra password casuale. Quindi, lo scriviamo al database crittografando lo stesso modo del solito.

$ New_password_sh \u003d Strrev (MD5 ($ New_password)). "B3P6F"; // grizzato
Mysql_query ("Update Users Set Password \u003d" $ New_password_sh "dove login \u003d" $ login "", $ db); // aggiornato.nelbase
// Formando un messaggio

$ Messaggio \u003d "Ciao," $ Login. "! Abbiamo generato una password per te, ora puoi inserire il sito citname.ru, usandolo. Dopo l'ingresso, è desiderabile cambiarlo. Password: \\ N." $ New_password; //Messaggio di testo
Posta ($ e-mail, "recupero della password", $ messaggio, "Tipo di contenuto: testo / piano; charset \u003d windows-1251 \\ r \\ n"); // spediremessaggio

Eco " La tua e-mail ha inviato una lettera con password. Sarai spostato dopo 5 secondi. Se non vuoi aspettare, quindi clicca qui. "; // reindirizzare l'utente
}
ALTRO ( // Se i dati non sono stati ancora introdotti
Eco "


Hai dimenticato la password?


Hai dimenticato la password?



Inserisci il tuo login:



Inserisci il tuo indirizzo email:






";
}
?>

Successivamente faremo un ingresso automatico. Funzionerà in questo modo: con una buona voce con una casella di controllo pressata nel cookie, AUTO \u003d "Sì" si adatta. Se il server vede che nel browser Auto \u003d "Sì", inizierà la sessione e le variabili prenderanno lo stesso, nel cookie. Quindi c'è una prova di eseguire sessioni del database.

Aperto testReg.. pHP. E aggiungi il codice dopo una voce di successo:

IF (ESSET ($ _ POST ["Salva"])) (
// Se l'utente vuole conservare i suoi dati per un ingresso successivo, teniamo nei cookie del suo browser

SetCookie ("ID", $ MyRow ["ID"], tempo () + 9999999);)
iF (ISSET ($ _ POST ["AUTOVHOD"])) (
// Se l'utente desidera inserire automaticamente il sito
SetCookie ("Auto", "Sì", tempo () + 9999999);
SetCookie ("Login", $ _Post ["Login"], tempo () + 9999999);
setCookie ("Password", $ _Post ["Password"], tempo () + 9999999);
SetCookie ("ID", $ MyRow ["ID"], tempo () + 9999999);)

Ora è necessario avviare la sessione nel posto giusto se hai un ingresso automatico. Aperto index.php. E scrivi all'inizio della pagina:

// L'intera procedura funziona alle sessioni. È in esso che i dati dell'utente sono memorizzati mentre si trova sul sito. È molto importante lanciarli all'inizio della pagina !!!
session_start ();
Includere ("bd.php"); // BD.Php File dovrebbe essere nella stessa cartella di tutti gli altri, in caso contrario, basta cambiare semplicemente il modo
Se (ISSET ($ _ cookie ["Auto"]) e ISSET ($ _ cookie ["Login"]) e ISSET ($ _ cookie ["password"]))
{// se le variabili necessarie
se ($ _cookie ["auto"] \u003d\u003d "sì") ( // Se l'utente desidera inserire automaticamente, quindi avviare la sessione
$ _Sessione ["Password"] \u003d Strrev (MD5 ($ _ cookie ["password"])). "B3P6F"; // nei cookie, la password non è stata crittografata e in sessioni solitamente memorizzate crittografate
$ _Sessione ["Login"] \u003d $ _ cookie ["login"]; // sessionea partire dallogin
$ _Sessione ["ID"] \u003d $ _ cookie ["ID"]; //ID utente
}
}

Ora non aiuteremo nemmeno l'output per cambiare l'utente! NEL uSCITA.. pHP. Le sessioni sono cancellate che sono ancora create indice. pHP.Grazie ai cookie che sono conservati per un tempo molto lungo! Prendiamo il file uSCITA.. pHP.E poi non è funzionale nel caso del login automatico. Abbiamo solo bisogno di cancellare l'ingresso automatico dei cookie dopo aver rimosso le variabili dalla sessione:

SetCookie ("Auto", "", Time () + 9999999); // Pulire l'ingresso automatico

Devi anche aggiungere a aggiornare._ utente.. pHP. Dopo aver aggiornato il login nella sessione:

$ _Sessione ["Login"] \u003d $ Login; // Aggiornamento Accedi alle sessioni
IF (ISSET ($ _ cookie ["login"])) (
SetCookie ("Login", $ Login, Time () + 9999999); // Aggiornamentoaccederenelcuochi
}

E lo stesso con una password

$ Risultato4 \u003d mysql_query ("Update Users Set Password \u003d" $ Password "dove login \u003d" $ old_login "", $ db); // aggiornamentoparola d'ordine
Se ($ RESIST4 \u003d\u003d "TRUE") ( // Se è vero, quindi aggiornarlo nella sessione
$ _Sessione ["Password"] \u003d $ Password;
IF (ISSET ($ _ cookie ["password"])) (
SetCookie ("Password", $ _ Posta ["Password"], tempo () + 9999999); // Aggiornamentoparola d'ordinenelcuochi, se unsonoc'è
}

Questo è tutto. Spero che ci riuscirai! In bocca al lupo!

Sessione - Questo è un meccanismo che consente di memorizzare determinati dati sul server unico per ciascun utente. I lettori particolarmente attenti troveranno somiglianza con biscotto. E, in generale, questo è lo stesso. Tuttavia, il punto chiave: i dati vengono memorizzati non nel browser dell'utente, ma in un file speciale sul serveril cui nome è unico per ogni utente. E unica sessione di identificatore PHP. già memorizzato B. biscotto.

Facciamolo con te lavoreremo con sessioni in PHP. E iniziamo S. session_start () funzioni. Questa funzione fa quanto segue: Se l'utente è arrivato per primo, quindi crea un identificativo univoco e lo scrive a biscottoE crea anche un nuovo file, di nuovo unico per l'utente. Se l'utente è già arrivato, il server legge il valore di un identificatore univoco da biscotto E, secondo lui, si riferisce al file di sessione desiderato. Da questo file PHP. legge tutti i dati e li colloca in un array $ _SESSION.. Scriviamo un semplice codice in cui scriviamo una variabile per la sessione o leggi se è già stato registrato.

session_start ();
IF (ISSET ($ _ sessione ["Nome"])) $ NAME \u003d $ _SESSION ["NOME"];
Else $ _Session ["Nome"] \u003d "15st";
ECHO $ \u200b\u200bNAME;
?>

Per prima cosa chiamiamo. session_Start () FunzioneHo descritto sopra. Quindi controlla: se c'è una variabile " nome."Nella sessione. Se c'è, allora leggi i dati da esso e scrivono alla variabile nome.. Se non c'è (cioè, l'utente è arrivato per la prima volta), quindi impostare la variabile " nome."Nella sessione significato" 15st.". La linea successiva invia il valore della variabile $ NOME.. Ovviamente, quando inizi prima, vedrai una stringa vuota, ma nel secondo vedrai la stringa " 15st.", Trovato dalla sessione.

Ti consiglio ora entra nella barra degli indirizzi: " javaScript: document.Cookie."(Inserisci sulla stessa scheda che lo script ha lanciato). Di conseguenza, vedrai circa quanto segue:" Phpslessid \u003d.". Solo un valore Phpslessid. Ed è quindi un identificatore unico.

E che tutto diventa completamente chiaro, ti consiglio di trovare persino file di sessione. Se stai usando Denalità, quindi si trova nella cartella " tMP.". Guarda i file che iniziano" sess_"- Questo è lo stesso file di sessione. Puoi aprirli in un semplice taccuino.

Un'altra proprietà molto importante è sessioni in PHP.. Quindi se biscotto Memorizza fino a quando il browser li elimina. E il browser non li cancella per impostazione predefinita. Quindi le sessioni sono mantenute il tempo specificato in impostazioni PHP.. Il valore predefinito è 15 minuti. Questo è se usi autenticazione basata sulla sessione, quindi dopo 15 minuti inazione Utente, dovrà nuovamente accedere. Certo, questo è buono, dal momento che se l'utente dimentica " Esci", quindi non accadrà nulla di male. Un utente malintenzionato non sarà in grado di utilizzare l'account utente. Inoltre, usa i cookie Possono essere dipinti, sostituti nel loro browser, e di conseguenza, l'attaccante è autorizzato sotto estranei, non sapendo anche la password. E la sessione non può rubare, poiché tutti i parametri sono memorizzati sul server e non lavorerai a loro.

Quindi prova principalmente nella tua pratica utilizzare sessioni, non pulito biscotto.

E, infine, voglio avvertire molto errore della cornice. Non utilizzare mai i dati nei browser a utilizzo della funzione Session_Start ()Altrimenti, darà un errore. Cioè, è impossibile scrivere in questo modo:

Echo "ciao";
session_start ();
?>

Quando si avvia questo script si verificherà un errore. La stessa regola è stata valida con biscotto (funzione SetCookie ()). Quindi, penso che tutto sia chiaro qui.

Quali dubbi sessioni in PHP.Questo, ovviamente, può essere utilizzato per memorizzare i dati su statistiche, autenticazione, impostazioni utente personali e altre cose simili.

Impareremo a rendere semplice autenticazione utente sul sito. Sul sito ci possono essere pagine solo per utenti autorizzati e funzionerà pienamente, se si aggiungono il nostro blocco di autenticazione a loro. Per crearlo, è necessario un database MySQL. Può avere 5 colonne (minimo) e forse di più se si desidera aggiungere informazioni sugli utenti. Chiamiamo il database "Userauth".

Creare in esso I seguenti campi: ID per il conteggio utente, UID per un numero identificativo utente unico, nome utente per nome utente, e-mail per il suo indirizzo e-mail E password per una password. È possibile utilizzare per autorizzare l'utente e il database già esistente, solo, come nel caso di un nuovo database, creare la seguente tabella.

Codice mysql.

Creare la tabella 'Utenti` (ID "Int (11) non null auto_increment,` uid` int (11) non nullo, `nome utente` Non ,` e-mail` Testo non , `password` `ID`)) motore \u003d Charset predefinito Myisam \u003d UTF8 AUTO_INCREMENT \u003d 1;

Ora crea un file "sql.php". È responsabile della connessione al database. Questo codice, in primo luogo, crea variabili per il server e l'utente quando si collega al server. In secondo luogo, sceglierà un database in questo caso "Usererauth". Questo file deve essere collegato a "log.php" e "reg.php" per accedere al database.

Codice PHP.

// il tuo nome utente mysql $ pass \u003d "Reduce"; // password $ CONN \u003d MySQL_Connect ($ server, $ utente, $ pass); // Connessione al server $ db \u003d mysql_select_db ("userauth", $ CONN); // Seleziona il database Se (! $ DB) ( // Se non è possibile selezionare un database Echo "Scusa, errore: (/\u003e"; // mostra un messaggio di errore Uscita (); // ti permette di lavorare il resto degli script PHP } ?>

Prossima pagina di entrata, lascia che si chiami "login.php". Innanzitutto, controlla i dati inseriti per errori. La pagina ha campi per il nome utente, la password, il pulsante Invia e il collegamento da registrare. Quando l'utente fa clic sul pulsante "Login", il modulo verrà elaborato tramite il codice dal file "log.php", quindi accedere al sistema.

Codice PHP.

0) { // Se ci sono errori di sessione $ err \u003d "

"; // Avvia una tabella Foreach ($ _Session [" ERRMSG "] come $ MSG) ( // riconoscimento di ciascun errore $ err. \u003d " "; // registralo nella variabile ) $ err. \u003d "
"$ Msg."
"; // chiudendo il tavolo UNSET ($ _SESSION ["ERRMSG"]); // Elimina sessione } ?> Modulo di accesso
Nome utente
Parola d'ordine
registrare

Quindi scriviamo uno script per accedere. Chiamiamolo "log.php". Ha una funzione per la pulizia dei dati di input da iniezioni SQL che il tuo script può essere viziato. In secondo luogo, riceve queste forme e li controlla sulla correttezza. Se i dati di input sono corretti, lo script invia all'utente alla pagina degli utenti autorizzati, in caso contrario, imposta errori e invia l'utente alla pagina di accesso.

Codice PHP.

// Avvia sessione per la registrazione Funzione Fix ($ STR) (// Pulizia $ STR \u003d Campi Trim ($ STR); IF (Get_Magic_QUOTES_GPC ()) ($ STR \u003d Stripslashes ($ ST);) // array per salvare errori $ erflag \u003d false; // Flag Errore $ USERNAME \u003d Fix ($ _ Posta ["Nome utente"]); //Nome utente $ Password \u003d Fix ($ _ Posta ["Password"]); // Password) // Controllo password se ($ Password \u003d\u003d "" ") ($ ERRMSG \u003d" Password mancante "; // Errore $ ERFLAG \u003d TRUE; // solleva la bandiera in caso di errore) // Se il flag di errore viene sollevato, si rimanda al modulo di registrazione // scrive errori session_write_close (); // sessione di chiusura // Reindirizzamento Uscita (); ) // richiesta del database $ Qry \u003d "Seleziona * da` Utili utenti dove" username` \u003d "$ USername" e` password` \u003d "". MD5 ($ password). "" "; $ Risultato \u003d mysql_query ($ Qry); // Controllare, se la richiesta ha avuto successo (ci sono dati su di esso) se (mysql_num_rows ($ risultato) \u003d\u003d 1) (while ($ riga \u003d mysql_fetch_assoc ($ risultato)) ($ _Session ["UID"] \u003d $ riga ["UID"]; // Ricevi UID dal database e posizionalo nella sessione $ _Sessione ["Nome utente"] \u003d $ Username; // imposta se il nome dell'utente coincide con la sessione session_write_close (); // sessione di chiusura Intestazione ("Ubicazione: membro.php"); // Reindirizzamento )) Altrimenti ($ _Session ["ERRMSG"] \u003d "Nome utente o password non valido"; // errore session_write_close (); // sessione di chiusura Intestazione ("Ubicazione: login.php"); // Reindirizzamento Uscita (); )?\u003e.

Facciamo la pagina di registrazione, chiamalo "register.php". Sembra una pagina di accesso, ha solo diversi campi, e invece di riferimento alla registrazione - un collegamento a login.php nel caso in cui l'utente abbia già un account.

Codice PHP.

0) { // Se ci sono errori di sessione $ err \u003d "

"; // Avvia la tabella Foreach ($ _Session [" ERRMSG "] come $ MSG) ( // imposta ogni errore $ err. \u003d " "; // scrive nella variabile ) $ err. \u003d "
"$ Msg."
"; // Fine della tabella nonse ($ _Sessione [" ERRMSG "]); // distrugge la sessione } ?> Modulo di registrazione
Nome utente
E-mail
Parola d'ordine
Ripeti la password
ho un account

Ora faremo lo script di registrazione nel file "reg.php". Sarà abilitato "sql.php" di connettersi al database. La stessa funzione viene anche utilizzata come nello script di input per pulire il campo di input. Variabili installate per possibili errori.. Avanti - una funzione per creare un identificatore univoco che non è mai stato fornito prima. Quindi i dati dal modulo di registrazione e controllato vengono recuperati. Controllo che l'indirizzo email è specificato in formato necessarioInoltre, se la password è specificata correttamente correttamente. Quindi lo script controlla se il database dell'utente è con lo stesso nome e se ci sono report di errore. E infine, il codice aggiunge un utente al database.

Codice PHP.

// Avvia sessione per la registrazione Funzione Fix ($ STR) (// Campi di pulizia $ STR \u003d @trim ($ STR); IF (Get_Magic_QUOTES_GPC ()) ($ STR \u003d Stripslashes ($ STR);) restituisce mysql_real_escape_string.($ Str); ) $ errmsg \u003d array (); // array per la memorizzazione di errori $ erflag \u003d false; // Errore flag $ UID \u003d "12323543534523453451445234534514452345345144523453451445685454465685454"; // ID univoco $ username \u003d fix ($ _ post ["username"]); //Nome utente $ Email \u003d $ _Post ["Email"]; // Email $ Password \u003d Fix ($ _ Posta ["Password"]); // Password $ RPASSWORD \u003d FIX ($ _ POST ["RPASSWORD"]); // ripetizione password // Controllare il nome dell'utente se ($ username \u003d\u003d "" ") ($ errmsg \u003d" nome utente mancante "; // errore $ erflag \u003d true; // solleva la bandiera in caso di errore ) // Controllare l'e-mail se (! Eregi ("^ [_ A-Z0-9 -] + (\\. [_ A-Z0-9 -] +) * @ + (\\. +) * (\\. (2.3 )) $ ", $ e-mail)) (// deve essere conforme al formato: [Email protetto] $ errmsg \u003d "Email non valida"; // Errore $ errflag \u003d true; // solleva la bandiera in caso di errore } // Controllo password se ($ Password \u003d\u003d "") ($ ERRMSG \u003d "Password mancante"; // errore $ erflag \u003d true; // solleva la bandiera in caso di errore } // Controllo della ripetizione della password se ($ RPASSWORD \u003d\u003d "") ($ ERRMSG \u003d "RIPETTO PASSWORD MANCANCE"; // Errore $ errflag \u003d true; // solleva la bandiera in caso di errore } // convalida password IF (STRCMP ($ PASSWORD, $ RPASSWORD)! \u003d 0) ($ ERRMSG \u003d "Le password non corrispondono a" // Errore $ erflag \u003d true; // solleva la bandiera in caso di errore } // controlla, se il nome utente è gratuito Se ($ username! \u003d "") ($ Qry \u003d "Seleziona * da` Utili utenti dove" username` \u003d "$ username" "; // Richiedi a mysql $ Risultato \u003d mysql_query ($ Qry); IF ($ Risultato (se (mysql_num_rows ($ risultato)\u003e 0) ( // Se il nome è già utilizzato $ errmsg \u003d "nome utente già in uso"; // messaggio di errore $ Errflag \u003d true; // solleva la bandiera in caso di errore ) mysql_free_result ($ risultato); )) // Se i dati non hanno superato la convalida, dirigono il modulo di registrazione Se ($ ERFLAG) ($ _SESSION ["ERRMSG"] \u003d $ ERRMSG; // messaggio di errore session_write_close (); // sessione di chiusura Intestazione ("Ubicazione: register.php"); // Reindirizzamento Uscita (); ) // Aggiunta di dati al database $ Qry \u003d "Inserisci in" Userauth`.Sers`Sers (`Uid`,` Nome utente`, `Email`,` password`) Valori ("$ UID", "$ USERNAME", "$ Email", " ". MD5 ($ password)." ")"; $ Risultato \u003d mysql_query ($ Qry); // controlla, se una richiesta di successo per l'aggiunta Se ($ Risultato) (echo "Grazie per la registrazione," $ username. ". Per favore inserisci qui"; Uscita ();) Else (Die (" Errore, fare riferimento a più tardi ");)?\u003e

Hai ancora bisogno di creare uno script per uscire dall'utente dal sistema. Interrompe la sessione per l'utente con questo identificativo e un nome univoco, quindi reindirizza l'utente alla pagina di accesso.

Codice PHP.

Infine, lo script "auth.php" può essere utilizzato per rendere le pagine disponibili solo per gli utenti autorizzati. Controlla i dati di input e, se sono corretti, consente all'utente di visualizzare le pagine e, in caso contrario, chiede di accedere. Inoltre, se qualcuno cerca di hackerare il sito creando una delle sessioni, sarà interrotta come in generale.

Codice PHP.

Una delle condizioni del codice sopra è oggetto della domanda.

Il seguente codice deve essere inserito nella pagina per gli utenti autorizzati, è chiamato, ad esempio "member.php", e potresti essere chiamato come si prega di.

Codice PHP.

Hai accesso a questa pagina. Esci ( )

L'autenticazione dell'utente è pronta!

La campana.

Ci sono quelli che hanno letto questa notizia prima di te.
Iscriviti per ricevere articoli freschi.
E-mail
Nome
Cognome
Come vuoi leggere la campana
Senza spam