PHP tutorial – Come creare un semplice sistema di login
PREMESSA: come da molti commenti pervenuti su questa guida, il sistema di login non è funzionante. Purtroppo però l’ autore di tale articolo non è più reperibile per poterlo aggiornare. Se qualcuno fosse in grado di sistemare l’ articolo per rendere funzionale il sistema di login può contattare Davide Tommasin direttamente ad suggerimenti@informaticafriuli.com
Grazie
————————————————————
Questo script è composto da 4 file:
1. main_login.php
2. checklogin.php
3. login_success.php
4. logout.php
Procedimento.
1- Noi abbiamo utilizzato un database chiamato test, in cui abbiamo creato un tabella chiamata members.
Questo è il codice sql per creare la tabella:
[mysql]CREATE TABLE `members` (
`id` int(4) NOT NULL auto_increment,
`username` varchar(65) NOT NULL default ”,
`password` varchar(65) NOT NULL default ”,
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=2 ;
–
– Dumping data for table `members`
–
INSERT INTO `members` VALUES (1, ‘admin’, ‘admin’);[/mysql]
Quindi per effettuare il login dovremo utilizzare come nome utente: admin e come password: admin
2 – Creiamo il file main_login.php
e copiamo al suo interno il seguente codice:
[html]
[/html]
3 – Creiamo il file checklogin.php e inseriamo al suo interno il seguente codice:
[php] $host=”localhost”; // Hostname
$username=”"; // Mysql username
$password=”"; // Mysql password
$db_name=”test”; //Nome del Database
$tbl_name=”members”; // Nome della Tabella
// Procedimento per connettersi al Database
mysql_connect(“$host”, “$username”, “$password”)or die(“cannot connect”);
mysql_select_db(“$db_name”)or die(“cannot select DB”);
// Nome utente e password inviate attraverso il form
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];
$sql=”SELECT * FROM $tbl_name WHERE username=’$myusername’ and password=’$mypassword’”;
$result=mysql_query($sql);
// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){
// Register $myusername, $mypassword and redirect to file “login_success.php”
session_register(“myusername”);
session_register(“mypassword”);
header(“location:login_success.php”);
}
else {
echo “Attenzione username o password errati”;
}
?>[/php]
4. Creiamo il file login_success.php e inseriamo al suo interno il seguente codice:
[php]// Controlla se la sessione è stata registrata, altrimenti rimanda alla pagina di login
// Questa prima parte dobbiamo inserirla in tutte le pagine che vogliamo proteggere con password prima di qualsiasi altra cosa
session_start();
if(!session_is_registered(myusername)){
header(“location:main_login.php”);
}
?>
[/php]
[html]
Login Successful
[/html]
5. Infine creiamo il file logout.php che ci pemetterà di distruggere la sessione:
[php] session_start();
session_destroy();
?>[/php]
In questo modo abbiamo creato un semplice sistema di login in php + mysql
Questo ebook è il primo pubblicato da Informatica Friuli dedicato alla personalizzazione di certi aspetti dei template per WordPress.
Questo ebook non deve dare grosse aspettative ...
Non c'è hosting, spazio web dove hai caricato i file del tuo sito, che ti da la garanzia al 100% di posizionarti nella serp di Google al primo posto.
[caption id="" ...
Prendo spunto da quanto si può leggere su MasterNewMedia per quanto riguarda il Newsmaster come la figura che filtra e fornisce ...

Manca un elemento fondamentale nello script main_login.php
Infatti senza un prima di Member Login ed il relativo tag di chiusura dopo lo script non esegue nessuna autenticazione.
Ciao
ovviamente tutti i tag che ho messo non vengono visualizzati anche se ho usato i tag prima e dopo il codice che ho inserito. Riprovo a fare il commento usando però il tag
ok la tua form di commento non accetta nessun tag. :@
In poche parole volevo dire che, senza un tag form con attributi action=”checklogin.php” method=”post” che racchiude tutta la table di immissione nome utente e password, lo script non esegue nessuna autenticazione.
Scusami per i commenti precedenti
Ciao,
lo script php funzionava, fino a quando è stato scritto qui.
Purtroppo l’editor a nostra disposizione ha cancellato parte di codice.
Vedo di sistemarlo il prima possibile.
Ciao
Roberto
Ah ok, grazie mille della delucidazione
questo sistema di login nn funziona + con il nuovo php,
ritorna errori:
session.bug_compat_42 e session.bug_compat_warn
Grazie della segnalaizone Danilo.
In questo caso spero che Roberto, l’ autore della guida, possa aggiornare l’ articolo.
Saluti a tutti. Il session.bug_compat_warn e il session.bug_compat_42 sono relativi alla registrazione delle variabili di sessione. Nasce dal fatto di aver utilizzato come nome di variabile locale uno già usato per la variabile di sessione.
$myusername=$_POST['myusername'];
e
session_register(“myusername”);
E’ possibile disabilitare l’errore da php.ini, ma è sicuramente consigliabile utilizzare nomi diversi.
Inoltre, per evitare un SQl-injection, è necessario modificare la query come segue
$sql=”SELECT * FROM $tbl_name WHERE username=’”.addslashes($myusername).”‘ and password=’”.addslashes($mypassword).”‘”;
La funzione addslashes (dovrebbe) applica uno carattere di escape prima di ogni carattere potenzialmente pericoloso per mysql.
Nello script in questione, utilizzando come utente e come password
‘ OR ”=’
vengo autenticato correttamente, in quanto la query diventa:
SELECT * FROM $tbl_name WHERE username=” OR ”=” and password=” OR ”=”
Condizione sempre vera; si viene quindi autenticati,anche se con user e password non “ottimali”.
Altra cosa carina sarebbe l’adozione della crittografia sulla password.
Così, in caso di accesso al database, non sarebbe possibile (a meno di verifiche a forza bruta) risalire alla password dell’utente (che poi così è libero di dimenticarla sul post-it sopra monitor !)
CREATE TABLE `members` (
`id` INT(4) NOT NULL AUTO_INCREMENT,
`username` VARCHAR(65) NOT NULL DEFAULT ”,
`password` VARCHAR(32) NOT NULL DEFAULT ”,
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;
–
– Dumping data for table `members`
–
INSERT INTO `members` VALUES (1, ‘admin’, md5(‘admin’));
In questo modo la password “admin” viene convertita in md5, una stringa di 32 caratteri univoca. Nel caso di “admin” risulta:
21232f297a57a5a743894a0e4a801fc3
La query dovrà diventare:
$sql=â€SELECT * FROM $tbl_name WHERE username=’â€.addslashes($myusername).â€â€˜ and password=’â€.md5($mypassword).â€â€˜â€;
Ora, se un hackerino riuscisse a risalire ad dato salvato (md5), magari con una query malevola che stampasse il contenuto della tabella di autenticazione, comunque non potrebbe accedere, in quanto non esiste (forza bruta a parte!) sistema per passare da md5 a parola chiave.
Ragazzi non si capisce niente, il post non è aggiornato e in definitiva questo login inutilizzabile
L’ autore ha qualche problema di tempo e non arriva ad aggiornare l’ articolo in quesot periodo: cmq mi prodigherò di recapitargli il messaggio
Ciao a tutti,
ho installato lo script ed ho un problema…
L’autenticazione sembra funzionare solo con la prima pagina login_success.php, ma quando vado a fare la verifica nelle altrepagine che voglio progeggere da autenticazione, vengo rediretto alla pagina di login.
Dov’è l’inghippo?
Thanx
Dany
E’ stato risistemato il post, ora il codice dovrebbe essere ok a detta dell’ autore… se non fosse così potreste sempre pensare di intasargli la casella mail per chiedere supporto lordmarin [chiocciola] gmail.com
Magari visto che sono in procinto di un trasloco meglio non intasarmi troppo la mail
ciao mi serviva una info. devo creare un progetto con un sito che permetta: registrazione utente, login e logout naturalmente… e che se loggato consenta di visualizzare una certa parte in una pagina…come inserire commenti ecc… se ospite invece, solo di visualizzare! inoltre mi serve che le pagine php accettino connessioni da più utenti contemporaneamente. Ho cercato fino ad ora ma trovo esempi (piuttosto complessi oltretutto) che utilizzano solo 1 utente loggato. E’ un progetto per scuola, quindi non pretendo super controlli di sicurezza ecc… mi basta la multiutenza e che appunto un utente se loggato può fare azioni, se ospite può solo vedere (oopure non accedere proprio ad alcune pagine).
ho dimenticato una domanda: a che serve nella tabella il campo ID? nell’esempio e nella gestione non è mai usato… non è più logico mettere come chiave primaria la username? (visto che non possono esistere username uguali)
E’ più logico avere una ID come chiave primaria, siccome è possibile consentire la modifica allo username, che causerebbe problemi in quanto chiave esterna di altre tabelle.
Allora premetto che ho poche esperienze di programmazione.. questo semplice login lo avevo fatto per un progettino..
Diciamo che mi era sembrato più logico mettere un ID come chiave primaria anche per quello che riguarda gli indici.. poi se ci sono modi migliori parliamone
ah ok ho capito xke l’ ID è chiave…a me serve metterla come nickname invece perchè voglio che il nick non sia più modificabile in quanto poi ad ogni nick è associata una cartella sul server con lo stesso nome e mi è più facile così
Bravi e per fortuna era un semple sistema di login?
E se fiosse stato complicato?
@nicola : magari quel “semplice” nel titolo può fuorviare l’ idea, ma se ci pensi bene, con un “semplice” copia incolla del codice dal post sopra scritto, hhai la possibilità di avere un sistema già funzionante. Per il resto passo la palla all’ autore del post.
manca la validazione dell’input, mai sentito parlare di SQL Injection? Quando la scelta e’ fra le cose facili e le cose fatte bene…
[...] questo anche se si usa il db PHP tutorial – Come creare un semplice sistema di login » Informatica Friuli oppure Login sicuro in Ajax e Php | Articoli Php | Php.HTML.it __________________ MY PORTFOLIO [...]
ciao a tutti questo sistema di login non funzona in nessun modo
ho testato tutto ma non va
errori: manca lo script registrayione
e infatti è un “semplice” sistema di login, non un “sicuro” sistema di login.
E per Nicola che non lo considera troppo semplice direi di tener presente che non è mai troppo tardi per cambiare e rinnovarsi …
[...] primo che ho trovato. qui Poi basta usare google e vedrai che qualcosa salta fuori. __________________ [...]
ho fatto esattamente quello che c’è scritto nella procedura sopra.. ed ho eliminato i warning come ha suggerito Dario Tion facendo diventare quelle due variabili:
session_register(“myuser”);
$myusername=$_POST['myuser'];
(non sono neanke sikura ke si dovessero cambiare così)
solo che non mi funziona il login, xkè anche se metto admin admin, mi dice ke l’utente è sbagliato. Se metto invece un nome utente e psw non presenti nel mio db allora mi escono 3 warning:
Warning: session_register() [function.session-register]: Cannot send session cookie – headers already sent by (output started at C:\xampp\htdocs\checklogin.php:9) in C:\xampp\htdocs\checklogin.php on line 32
Warning: session_register() [function.session-register]: Cannot send session cache limiter – headers already sent (output started at C:\xampp\htdocs\checklogin.php:9) in C:\xampp\htdocs\checklogin.php on line 32
Warning: Cannot modify header information – headers already sent by (output started at C:\xampp\htdocs\checklogin.php:9) in C:\xampp\htdocs\checklogin.php on line 34
la riga 32 è : session_register(“myuser”);
la riga 34 è: header(“location:login_success.php”);